随笔-179  评论-666  文章-29  trackbacks-0

官方文档 :



3


30


1000


false


test


false


100





null


false


60


3


60


15


100





3


root


password





select id from test where id=1


300


false


true


root


false

con_test
30000
30
10
30
25
10
0




200

300





转:
解决mysql 8小时问题

最近的一个项目在hibernate使用c3p0的连接池,数据库为mysql。开发测试没有问题,在运行中每个一段长的空闲时间就出现异常:

java 代码
  1. org.hibernate.exception.jdbcconnectionexception: could not execute query
  2. at org.hibernate.exception.sqlstateconverter.convert(sqlstateconverter.java:74)
  3. at org.hibernate.exception.jdbcexceptionhelper.convert(jdbcexceptionhelper.java:43)
  4. .......
  5. caused by: com.mysql.jdbc.exceptions.mysqlnontransientconnectionexception: no operations allowed after connection closed.connection was implicitly closed due to underlying exception/error:
  6. ** begin nested exception **
  7. com.mysql.jdbc.communicationsexception
  8. message: communications link failure due to underlying exception:
  9. ** begin nested exception **
  10. java.net.socketexception
  11. message: broken pipe
  12. stacktrace:
  13. java.net.socketexception: broken pipe
  14. at java.net.socketoutputstream.socketwrite0(native method)
  15. ......
  16. ** end nested exception **

查看了mysql的文档,以及connector/j的文档以及在线说明发现,出现这种异常的原因是:

mysql服务器默认的“wait_timeout”是8小时,也就是说一个connection空闲超过8个小时,mysql将自动断开该 connection。这就是问题的所在,在c3p0 pools中的connections如果空闲超过8小时,mysql将其断开,而c3p0并不知道该connection已经失效,如果这时有 client请求connection,c3p0将该失效的connection提供给client,将会造成上面的异常。

解决的方法有3种:

  1. 增加wait_timeout的时间。
  2. 减少connection pools中connection的lifetime。
  3. 测试connection pools中connection的有效性。

当然最好的办法是同时综合使用上述3种方法,下面就dbcp和c3p0分别做一说明,假设wait_timeout为默认的8小时

dbcp增加以下配置信息:

  1. //set to 'select 1'
  2. validationquery = "select 1"
  3. //set to 'true'
  4. testwhileidle = "true"
  5. //some positive integer
  6. timebetweenevictionrunsmillis = 3600000
  7. //set to something smaller than 'wait_timeout'
  8. minevictableidletimemillis = 18000000
  9. //if you don't mind a hit for every getconnection(), set to "true"
  10. testonborrow = "true"

c3p0增加以下配置信息:

  1. //获取connnection时测试是否有效
  2. testconnectiononcheckin = true
  3. //自动测试的table名称
  4. automatictesttable=c3p0testtable
  5. //set to something much less than wait_timeout, prevents connections from going stale
  6. idleconnectiontestperiod = 18000
  7. //set to something slightly less than wait_timeout, preventing 'stale' connections from being handed out
  8. maxidletime = 25000
  9. //if you can take the performance 'hit', set to "true"
  10. testconnectiononcheckout = true

更多的配置信息大家可以查看c3p0文档,connector/j文档,以及dbcp的文档。

转:

我自己的配置:

jdbc.driverclass=com.mysql.jdbc.driver
jdbc.jdbcurl = jdbc:mysql://localhost:3306/test
jdbc.user = root
jdbc.password = 12345
jdbc.minipoolsize = 1
jdbc.maxpoolsize = 20
jdbc.initialpoolsize = 1
jdbc.maxidletime = 25000
jdbc.acquireincrement = 1

jdbc.acquireretryattempts = 30
jdbc.acquireretrydelay = 1000
jdbc.testconnectiononcheckin = true
jdbc.automatictesttable = c3p0testtable
jdbc.idleconnectiontestperiod = 18000
jdbc.checkouttimeout=3000


  
  
  
  
  
     
  
  
  
  
  
  
  
  
  
  

posted on 2009-03-29 23:31 alpha 阅读(91650) 评论(26)     所属分类: hibernate

评论:
# re: c3p0详细配置 2009-09-01 06:39 |
恩 很详细,我已经收藏,感谢楼主。  回复  
  
# re: c3p0详细配置 2009-12-07 10:27 |
收藏,我一直以看帖要回为美德  回复  
  
# re: c3p0详细配置 2010-01-20 10:58 |
收藏了哈。。谢谢了  回复  
  
# re: c3p0详细配置 2010-01-29 11:11 |
谢谢  回复  
  
# re: c3p0详细配置[未登录] 2010-03-04 22:47 |
good!  回复  
  
# re: c3p0详细配置 2010-03-19 11:43 |
十分感谢 很需要这样的好文章  回复  
  
# re: c3p0详细配置 2010-06-22 20:27 |
精神可嘉  回复  
  
# re: c3p0详细配置 2010-11-22 15:51 |
收藏了~很详细,谢谢楼主  回复  
  
# re: c3p0详细配置 2010-11-23 10:50 |
真的很详细,收藏了  回复  
  
# re: c3p0详细配置[未登录] 2011-02-23 16:48 |
thanks  回复  
  
# re: c3p0详细配置 2011-03-09 16:51 |
很详细 很好  回复  
  
# re: c3p0详细配置 2011-04-07 08:56 |
收藏了~很详细,谢谢楼主  回复  
  
# re: c3p0详细配置[未登录] 2011-05-06 17:07 |
写的不错...  回复  
  
# re: c3p0详细配置 2011-08-10 09:05 |
谢了,长见识了  回复  
  
# re: c3p0详细配置 2012-05-09 09:49 |
@啊正
afdsafdsa  回复  
  
# re: c3p0详细配置 2012-09-03 18:53 |
楼主,弱弱的问一句,什么是c3p0  回复  
  
# re: c3p0详细配置[未登录] 2013-06-21 16:24 |
谢谢楼主,收藏之  回复  
  
# re: c3p0详细配置[未登录] 2014-04-11 16:20 |
相当好~~~~  回复  
  
# re: c3p0详细配置[未登录] 2014-06-16 15:03 |
非常好!   回复  
  
# re: c3p0详细配置[未登录] 2014-10-31 13:58 |
hao  回复  
  
# re: c3p0详细配置 2014-12-31 10:14 |
不错!!
  回复  
  
# re: c3p0详细配置 2015-01-22 10:39 |
不错,看帖必回啊,尤其是无私奉献的我们  回复  
  
# re: c3p0详细配置 2015-02-03 15:28 |
讲的很详细 谢lz了  回复  
  
# re: c3p0详细配置 2015-03-06 18:32 |
很好,感谢楼主!  回复  
  
# re: c3p0详细配置 2015-03-09 16:24 |
感谢楼主,已收藏。  回复  
  
# re: c3p0详细配置 2015-09-21 15:25 |
非常感谢...解决了c3po 8小时断开的问题。  回复  
  

只有注册用户后才能发表评论。


网站导航:
              
 
网站地图