Java Federdatenbankanwendung wird nicht Bezug auf org.enhydra.jdbc.pool.PoolKeeper verlassen noch aktiv ist, warum?
-
22-07-2019 - |
Frage
Hallo alle ich eine einfache Feder Anwendung, die, da es wird nicht enden, ist immer noch ein Verweis auf org.enhydra.jdbc.pool.PoolKeeper links. Ich schließe alle Referenzen, die ich sind unten Revelant fühlt sich es ok aussehen und hat dies jemand zuvor erlebt?
Ich lief jstack, um zu sehen, was nicht Daemon-Threads, wo laufen und fand die folgenden.
"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)
Jetzt bin ich verwirrt, warum dies geschieht ich relevante Teile meines JPA Konfiguration enthalten
<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>
Danke Paul
Lösung
Webanwendungen konfigurieren typischerweise einen Spring-Anwendungskontext mit ContextLoaderListener
, die den Anwendungskontext schließt, wenn die Web-Anwendung gestoppt wird.
Standalone-Java-Anwendungen haben die close
Methode auf dem Anwendungskontext, der die Methoden in dem destroy-method
Attribute konfigurierten aufruft, während die Bohnen zu zerstören. Alternativ rufen Sie die
Andere Tipps
Ihre Frühlings-Datei sieht mir richtig auf der Grundlage der enhydra javadoc (die auf Details spärlich). Ich habe eine stopPool()
Methode in der API. Vielleicht versuchen Sie, dass in Ihrem destroy-method
?