我们收到java.sql.SQLException:Connection已经关闭。执行交易时间歇性地例外。我们使用的是tomcat 7.X,以下是配置。
<Context docBase="ROOT" reloadable="true" antiJARLocking="true">
<Resource
name="jdbc/DS"
auth="Container"
type="javax.sql.DataSource"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://XXXXXXX"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
username="XXXXXX"
password="XXXXXX"
maxActive="20"
maxIdle="3"
minIdle="3"
maxWait="10000"
removeAbandoned="true"/>
</Context>
可能我们在这里遗漏了导致问题的一些配置或属性。
请建议任何其他图书馆来解决此问题或帮助找出根本原因。
提前致谢。
答案 0 :(得分:2)
以下配置为我工作
<Context context="ROOT" debug="0" reloadable="false" useHttpOnly="true" cacheMaxSize="40960" cacheTTL="60000" cachingAllowed="true" antiJARLocking="true">
<Resource name="XYZ" auth="Container"
description="Exchange DB Connection"
dataSourceClassName="org.postgresql.ds.PGSimpleDataSource"
dataSource.serverName="XXXXX"
dataSource.databaseName="XXXX"
dataSource.portNumber="XXXX"
dataSource.user="xyz"
dataSource.password="xyz"
maximumPoolSize="20"
minimumIdle="5"
connectionTimeout="300000"
factory="com.zaxxer.hikari.HikariJNDIFactory"
registerMbeans="true"
type="javax.sql.DataSource" />
此处的键值为 connectionTimeout 。 您当前使用的工厂具有默认超时,之后会强制关闭会话。
上面的连接超时值对我有用,对于您的应用场景,您需要进行一些实验以获得正确的值。
答案 1 :(得分:0)
添加以下值:
removeAbandonedTimeout="600"