java Tomcat连接池问题无法在关闭的连接上调用方法
我的应用程序使用Spring2.5。并部署在Tomcat服务器上。有时,当我的数据库连接空闲时,会出现以下错误:
[TeraJDBC 14.00.00.13] [Error 1095] [SQLState HY000] Cannot call a method on closed connection
这是数据源配置
<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>
这里有我缺少的配置吗
# 1 楼答案
虽然Spring的
JdbcTemplate
使用的所有连接在每个事务结束时都会关闭,但Tomcat的JDBC Connection Pool永远不会返回驱动程序获得的实际Connection
DataSource#getConnection
总是返回一个代理,这样Connection#close
就返回到池的连接,而不是物理地关闭它因此,正如this answer中所解释的,连接可能被服务器关闭。因此,您需要配置池来验证连接,如answer cited by Kayaman
我怀疑您的问题不是由连接问题引起的,而是由服务器策略引起的,因此我将设置:
以便每60秒检查一次物理连接是否正常