Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java spring数据库应用程序赢得';t退出对org.enhydra.jdbc.pool.PoolKeeper的引用仍处于活动状态为什么?_Java_Spring_Jpa_Transactions_Jta - Fatal编程技术网

Java spring数据库应用程序赢得';t退出对org.enhydra.jdbc.pool.PoolKeeper的引用仍处于活动状态为什么?

Java spring数据库应用程序赢得';t退出对org.enhydra.jdbc.pool.PoolKeeper的引用仍处于活动状态为什么?,java,spring,jpa,transactions,jta,Java,Spring,Jpa,Transactions,Jta,大家好,我有一个简单的Spring应用程序,它不会结束,因为仍然有对org.enhydra.jdbc.pool.PoolKeeper的引用。我在下面列出了所有我觉得有意义的参考资料。它看起来还好吗?以前有人经历过吗 我运行了jstack来查看哪些非守护进程线程正在运行,并发现了以下内容 "Thread-1" prio=10 tid=0x00007f89b03d8000 nid=0x755 in Object.wait() [0x00007f89bc243000] java.lang.Thr

大家好,我有一个简单的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)
“Thread-1”prio=10 tid=0x00007f89b03d8000 nid=0x755 in Object.wait()[0x00007f89bc243000]java.lang.Thread.State:java.lang.Object.wait(本机方法)处的TIMED_WAITING(在对象监视器上)
-在org.enhydra.jdbc.pool.PoolKeeper.run(PoolKeeper.java:55)上等待(org.enhydra.jdbc.pool.PoolKeeper)
-在java.lang.Thread.run(Thread.java:619)处锁定(org.enhydra.jdbc.pool.PoolKeeper)
现在我不明白为什么会发生这种情况,我包括了我的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>

谢谢
Paul

基于enhydra javadoc,我认为您的Spring文件看起来是正确的(详细信息很少)。我确实在API中看到了
stopPool()
方法。也许可以在您的
destroy方法中尝试一下

Web应用程序通常使用配置Spring应用程序上下文,这会在Web应用程序停止时关闭应用程序上下文


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

谢谢你的建议。no joy。谢谢Jim,我正在寻找close方法,但当我将ClassPathXmlApplicationContext存储在ApplicationContext而不是ConfigurableApplicationContext中时,我从未见过该方法。