0

こんにちは。org.enhydra.jdbc.pool.PoolKeeperへの参照が残っているため、終了しない単純なSpringアプリケーションがあります。私は以下に私が啓示的であると感じるすべての参考文献を含めますそれは大丈夫に見えますか、そして誰かがこれを以前に経験したことがありますか?

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>

ありがとうポール

4

2 に答える 2

1

ContextLoaderListenerWeb アプリケーションは通常、Web アプリケーションが停止したときにアプリケーション コンテキストを閉じるを使用して Spring アプリケーション コンテキストを構成します。

スタンドアロン Java アプリケーションはclose、アプリケーション コンテキストでメソッドを呼び出す必要がありますdestroy-method。これにより、Bean の破棄中に属性で構成されたメソッドが呼び出されます。または、メソッドを呼び出して、registerShutdownHookJVM のシャットダウン時にアプリケーション コンテキストを閉じるシャットダウン フックを登録します。

于 2009-09-18T17:09:27.777 に答える
0

あなたのSpringファイルは、enhydra javadoc(詳細はまばらです)に基づいて私には正しいように見えます。stopPool()API にメソッドがありました。おそらくあなたのでそれを試してみてくださいdestroy-method

于 2009-09-18T16:16:52.650 に答える