Java spring 数据库应用程序不会退出对 org.enHydra.jdbc.pool.PoolKeeper 的引用仍然处于活动状态,为什么?

StackOverflow https://stackoverflow.com/questions/1445503

大家好,我有一个简单的 Spring 应用程序,它不会结束,因为仍然有 org.enHydra.jdbc.pool.PoolKeeper 的引用。我在下面列出了我认为相关的所有参考资料,它看起来不错吗?以前有人经历过吗?

我运行 jstack 来查看正在运行的非守护线程,并发现以下内容。

"Thread-1" prio=10 tid=0x00007f89b03d8000 nid=0x755 in Object.wait() [0x00007f89bc243000]    java.lang.Thread.State: TIMED_WAITING (on object monitor)  at java.lang.Object.wait(Native Method)
    - waiting on <0x00007f89ec57de00> (a org.enhydra.jdbc.pool.PoolKeeper)  at org.enhydra.jdbc.pool.PoolKeeper.run(PoolKeeper.java:55)
    - locked <0x00007f89ec57de00> (a org.enhydra.jdbc.pool.PoolKeeper)  at java.lang.Thread.run(Thread.java:619)

现在我很困惑为什么会发生这种情况我包括了 JPA 配置的相关部分

<bean id="innerDataSource" class="org.enhydra.jdbc.standard.StandardXADataSource"
    destroy-method="shutdown">
    <property name="transactionManager" ref="jotm" />
    <property name="driverName" value="${jdbc.driverClassName}"/>
    <property name="url" value ="${jdbc.url}"/>
    <property name="user" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>
<bean id="dataSource" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource"
    destroy-method="shutdown">
    <property name="dataSource" ref="innerDataSource"/>
    <property name="user" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
    <property name="maxSize" value="100" />
    <!-- test your jdbc connection before using it -->
    <property name="checkLevelObject" value="${jdbc.checkLevelObject}"/>
    <property name="jdbcTestStmt" value="${jdbc.jdbcTestStmt}"/>
</bean>

谢谢保罗

有帮助吗?

解决方案

Web 应用程序通常使用以下方式配置 Spring 应用程序上下文 ContextLoaderListener, ,当 Web 应用程序停止时,它会关闭应用程序上下文。

独立的 Java 应用程序必须调用 close 应用程序上下文中的方法,它调用在 destroy-method 属性同时销毁bean。或者,致电 registerShutdownHook 方法注册一个关闭钩子,该钩子在 JVM 关闭时关闭应用程序上下文。

其他提示

根据 enHydra javadoc (细节很少),你的 Spring 文件对我来说看起来是正确的。我确实看到了一个 stopPool() API 中的方法。也许尝试在你的 destroy-method?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top