读书人

c3p0配备解决java.net.SocketExceptio

发布时间: 2012-07-23 09:42:19 作者: rapoo

c3p0配置解决java.net.SocketException: Broken pipe

最近的一个项目在Hibernate使用C3P0的连接池,数据库为Mysql。开发测试没有问题,在运行中每个一段长的空闲时间就出现异常Communications link failure due to underlying exception:

testOnBorrow = testConnectionOnCheckout = true

更多的配置信息大家可以查看C3P0文档,Connector/J文档,以及DBCP的文档。

?

解决方案(二)

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

?

当前的几个项目都是放在LINUX下面的,数据库采用MySql,我们设置了每天晚上转点的时候自动重启,不过还是经常会出现无法登录的问题,搞得不得每天重启应用。

??????在仔细查看日志后,终于找到原因了。

?? 这与MySql的一个默认设置有关,把网上找到的一些资料整如下,以防下次再出现这种问题:

最近在用一个MySQL的Java连接池的过程中,连接一晚上不释放,第二天就会造成超时的错误,查了一下原因,原来是因为MySQL默认的空闲等待时间是8个小时,一旦空闲超过8个小时,就会抛出异常。异常文本如下:

com.mysql.jdbc.CommunicationsException
MESSAGE: Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION ** java.net.SocketException
MESSAGE: Software caused connection abort: socket write error

解决方式:编辑/etc/my.cnf(windows下为my.ini),将超时时间设置为10年,在[mysqld]后面加入:
wait_timeout=315360000 然后重启MySQL

# service mysql restart

搞定。然后重启超时的java连接池程序吧。

读书人网 >其他数据库

热点推荐