我在Grails服务中运行了一些Groovy SQL,并且经常收到以下错误消息:
org.springframework.transaction.interceptor.TransactionInterceptor - 由提交异常覆盖的应用程序异常 java.sql.SQLException:连接已经关闭。
据我所知,JDBC连接池配置为经常删除未使用的连接(并在每次使用连接时重置放弃的计时器)。我认为这是我麻烦的根本原因 - 连接被池关闭但我的代码不知道这一点。我想知道是否有办法从代码中处理这个问题,而不是通过更改连接池配置。
我的代码是这样的(原谅sql2
变量名称)...
def sql = new Sql(dataSource)
sql.firstRow ...
sql.close()
// long running non-db code (an api call)
def sql2 = new Sql(dataSource)
sql2.executeUpdate ... // THIS IS WHERE THE ERROR HAPPENS
sql2.close
我的想法是new Sql(dataSource)
会给我一个新的联系,但看起来我错了。有没有办法获得新的连接,或以其他方式处理这个问题?
游泳池配置:
maxIdle="0"
maxWait="30000"
removeAbandoned="true"
testOnBorrow="true"
validationInterval="34000"
validationQuery="select sysdate from dual"
removeAbandonedTimeout="60"
logAbandoned="true"
jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.StatementCache;org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer"