2011-08-05 158 views
1

我使用tomcat 7和tomcat jdbc连接池来清理mysql连接。Tomcat连接池mysql配置,以避免空闲连接超时

在夜间时段,我们没有任何活动,所以所有连接都闲置超过8小时,并被mysql丢弃。 (mysql的wait_timeout默认)。

我们用下面的池配置:

<Resource name="jdbc/dbName" 
     auth="Container" 
     factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
     type="javax.sql.DataSource" 
     maxActive="50" 
     maxIdle="30" 
     maxWait="5000" 
     driverClassName="com.mysql.jdbc.Driver" 
     validationQuery="SELECT 1" 
     testOnBorrow="true" 
     testWhileIdle="true" 
     timeBetweenEvictionRunsMillis="10000" 
     removeAbandoned="true" 
     removeAbandonedTimeout="60" 
     logAbandoned="true" 
     username="xxx" 
     password="xxx" 
     url="jdbc:mysql://host:3306/xxx"/> 

我期待据EvictionPolicy除去空闲连接方式,他们曾经得到由MySQL关闭之前。不知怎的,一天以后,我们得到以下异常:

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:没有允许后连接closed.Connection隐式的由司机封闭作业。

我想这个问题应该是jdbc连接池可以修复的东西,但是有很多配置属性,我之前没有使用过这个池。任何人都有一套很好的属性来配置池不会关闭连接?

亲切的问候,

阿尔伯特

+0

您确定您的代码正在从'pool'的'try'的'finally'块的每个**连接上调用'connection.close()'吗? – BalusC

+0

我实际上使用Lift框架(scala)。没有打开/关闭连接池应该做什么(或不做)? – Albert

回答

0

解决它。毕竟,这不是一个混合问题。我们正在使用squeryl并一起提升,这不是一个快乐的combi(只是)。连接在返回池之前关闭。 开沟升降机的DB连接管理有利于squeryl解决它。

+0

你能更具体地说明你做了什么吗?你的意思是遵循这个[模式](https://github.com/migo/test-squerylrecord/blob/master/src/main/scala/test/KickTheTires.scala),并使用新的StandardDBVendor和DB.defineConnectionManager,我没有看不到他们使用BoneCP。 – Kevin