내 응용 프로그램은 Spring 2.5.x를 사용하고 Tomcat 서버에 배포됩니다. 때때로 내 db 연결이 유휴 상태 일 때 아래 오류가 발생합니다.
[TeraJDBC 14.00.00.13] [오류 1095] [SQLState HY000] 닫힌 연결에서 메서드를 호출 할 수 없습니다.
다음은 데이터 소스 구성입니다.
<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource"
destroy-method="close">
<property name="driverClassName" value="com.teradata.jdbc.TeraDriver"/>
<property name="url" >
<util:constant static-field="_DB_HOST"/>
</property>
<property name="username">
<util:constant static-field="_DB_USER"/>
</property>
<property name="password">
<util:constant static-field="_DB_PWD"/>
</property>
<property name="initialSize" value="1" />
<property name="maxActive" value="50" />
</bean>
여기에 누락 된 구성이 있습니까?
Spring에서 사용하는 모든 연결 JdbcTemplate
은 각 트랜잭션이 끝날 때 닫히지 만 Tomcat의 JDBC 연결 풀 은 실제로 Connection
드라이버가 얻은 실제를 반환하지 않습니다 . DataSource#getConnection
항상 프록시를 Connection#close
반환하므로 물리적으로 닫는 대신 풀에 대한 연결을 반환합니다.
따라서이 답변 에서 설명한 것처럼 연결은 서버에 의해 닫힐 수 있습니다. 따라서 Kayaman이 인용 한 답변 에서와 같이 연결을 검증하도록 풀을 구성해야합니다 .
귀하의 문제는 연결 문제가 아니라 서버 정책으로 인한 것으로 의심되므로 다음을 설정합니다.
<property name="validationQuery" value="SELECT 66353343" />
<property name="testWhileIdle" value="true" />
<property name="timeBetweenEvictionRunsMillis" value="60000" />
60 초마다 물리적 연결이 작동하는지 확인합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다