جافا تطبيق قاعدة بيانات الربيع لن يستقيل إشارة إلى org.enhydra.jdbc.pool.PoolKeeper لا يزال نشطا لماذا؟
-
22-07-2019 - |
سؤال
ومرحبا بكم جميعا عندي طلب بسيط الربيع التي لن تنتهي كما لا يزال هناك إشارة اليسار إلى org.enhydra.jdbc.pool.PoolKeeper. I تشمل كافة المراجع أشعر هي متحملة دونه لا تبدو طيب وأي شخص من ذوي الخبرة هذا من قبل؟
وركضت 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)
والآن أنا في حيرة لماذا هذا يحدث I تشمل الأجزاء ذات الصلة من تكوين النقابة بلدي
<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>
والشكر بول
المحلول
وتطبيقات الويب عادة تكوين سياق التطبيق الربيع باستخدام <لأ href = "http://static.springsource.org/spring/docs/2.5.x/reference/web-integration.html#web-integration-common" يختلط = "نوفولو noreferrer"> ContextLoaderListener
، الذي يغلق سياق التطبيق عندما يتم إيقاف تطبيق ويب.
والمستقلة جافا يجب أن ندعو في طريقة close
على سياق التطبيق، التي تحتج طرق تكوينها في السمة destroy-method
بينما هو يدمر الفاصوليا. بدلا من ذلك، استدعاء في registerShutdownHook
طريقة لتسجيل ربط اغلاق يغلق سياق التطبيق على JVM الاغلاق.
نصائح أخرى
وملف الربيع الخاص بك يبدو الصحيح بالنسبة لي على أساس جافادوك enhydra (والذي هو متفرق على مزيد من التفاصيل). أرى طريقة stopPool()
في API. ربما تحاول أن في destroy-method
بك؟