Java Spring 데이터베이스 응용 프로그램은 org.enhydra.jdbc.pool.poolkeeper에 대한 참조를 종료하지 않습니다.
-
22-07-2019 - |
문제
안녕하세요 모두 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>
감사합니다 폴
해결책
웹 응용 프로그램은 일반적으로 사용을 사용하여 스프링 응용 프로그램 컨텍스트를 구성합니다 ContextLoaderListener
, 웹 응용 프로그램이 중지 될 때 응용 프로그램 컨텍스트를 닫습니다.
독립형 Java 응용 프로그램은 전화해야합니다 close
애플리케이션 컨텍스트에 대한 메소드에서 구성된 메소드를 호출합니다. destroy-method
콩을 파괴하는 동안 속성. 또는 전화로 전화하십시오 registerShutdownHook
메소드 JVM 종료시 응용 프로그램 컨텍스트를 닫는 종료 후크를 등록하는 방법.
다른 팁
Spring 파일은 Enhydra Javadoc (세부 사항에서 드문 경우)을 기반으로 나에게 정확 해 보입니다. 나는 a를 보았다 stopPool()
API의 방법. 아마도 당신의 시도를 시도하십시오 destroy-method
?
제휴하지 않습니다 StackOverflow