如何处理被遗弃的连接?

时间:2016-01-05 00:28:01

标签: grails jdbc groovy groovy-sql

我在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"

0 个答案:

没有答案