SSH项目过一段时间之后再访问会报一次Could not open Hibernate session for transaction 异常,Caused by: com.mysql.jdbc.C...

  前端时间到客户那去进行项目的上线测试,将项目部署好之后,运行都是正常的,可是每到了第二天早上访问的时候,就会报一个Could not open Hibernate session for transaction 异常,Caused by: com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception,当时很摸不着头脑,后来就开始从数据库连接的源头开始找,本次项目中用的是c3p0连接池,并将其交给了spring管理,所以在配置文件中配置了一些数据库连接的必要属性,数据库驱动、数据库url、用户名和密码等,但是总感觉问题出在这,c3p0通过这些配置竟然第一次访问不到数据库,在通过一番查阅资料之后,了解到mysql经过28800秒也就是8小时之后会将所有的空闲连接关闭,而c3p0经过6000000秒才会断开连接,所以很有可能出现mysql的连接已经关掉了,而c3p0还没有保持着连接,所以每次过完8小时访问之后,通过c3p0去访问的时候,c3p0还处于正常连接状态则会去直接请求打开事务然后访问数据库,而此时的数据库已经关闭,自然就出现了Hibernate不能打开session的异常。

  解决办法是在配置文件中加入: 

<!-- 使c3po每隔28000检查已有的连接是否可用 -->

<property name="idleConnectionTestPeriod" value="28000"></property>
<!-- 最大空闲时间,超过空闲时间的连接将被丢弃。为0或负数则永不丢弃。默认为0 -->
<property name="maxIdleTime" value="28000"></property>
<property name="preferredTestQuery" value="测试连接数据库的sql语句"></property>  ----比如select *  from systemInfo;

 

转载于:https://www.cnblogs.com/maysky/p/7099853.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值