最近项目用到了hibernate3.0 c3po mysql的数据层组合,开发部署非常顺利,但每天早上访问应用都抛出 Could not open Hibernate session for transaction 异常,Caused by: com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception,但经过几次访问后又恢复正常,datasource配置如下:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="jdbcUrl">
<value><![CDATA[jdbc:mysql://localhost:3306/WAP2?useUnicode=true&characterEncoding=latin1]></value>
</property>
<property name="user">
<value>root</value>
</property>
<property name="password">
<value>zznode</value>
</property>
<property name="minPoolSize">
<value>3</value>
</property>
<property name="maxPoolSize">
<value>20</value>
</property>
<property name="maxStatements">
<value>50</value>
</property>
<property name="maxIdleTime">
<value>6000000</value>
</property>
</bean>
根据问题现象初步认为是数据库连接出现问题,逐用异常作为关键词google(这是我遇见不能解决的问题时惯用的方法);得到了相关信息:1、mysql 数据库链接默认的超时时长为28800秒,2、c3p0 的几个参数意思;
通过以上信息的收集隐隐知道了问题所在(mysql经过28800秒也就是8个小时后关掉空闲链接,而c3p0是经过6000000妙才断开链接,就有可能出现c3po保持的连接有可能已经被mysql关掉了,自然就出现了hibernate不能打开session,并且都是第二天一早就出错);为了验证我的想法,决定在开发机上重现这个错误;首先在mysql配置文件my.ini 加上 wait_timeout=30 让mysql经过30妙就关掉链接,重启应用,第一次访问成功,等待一分钟后访问果然出现同样的错误,说明问题诊断正确,着手修改配置如下:
<property name="maxIdleTime">
<value>28000</value>
</property>
<property name="idleConnectionTestPeriod">
<value>28000</value>
</property>
配置解释:28000<28800 使c3p0 在mysql关不连接之前关闭自己持有的链接,配置idleConnectionTestPeriod 参数使c3po每隔28000检查已有的连接是否可用,这样应该确保拿到的连接都是可用的,如果还不放心可以加上 testConnectionOnCheckout参数每当拿出连接的时候就检查一下是否可以,这个可能会使mysql有一定的性能牺牲;
<property name="testConnectionOnCheckout">
<value>true</value>
</property>
通过以上修改检测一段时间没有出现同样问题,问题解决!总结解决问题的三个步骤:收集相关信息、重现问题、解决测试。
http://blog.csdn.net/hyqcano/article/details/799598
【注】:以上内容转自:
分享到:
相关推荐
博文链接:https://wxinpeng.iteye.com/blog/203088
hibernate连接Oracle和mySql数据库驱动下载,mysql-connector-java-5.1.7-bin.jar,ojdbc6.jar,ojdbc7.jar,xdb6.jar,ucp.jar,simplefan.jar,orai18n.jar,ons.jar,antlr-2.7.7.jar,c3p0-0.9.2.1.jar等等全部...
数据库的链接包是MySQl数据库,链接使用的C3P0 SSH是 struts+spring+hibernate的一个集成框架,是目前比较流行的一种Web应用程序开源框架 现在的结构是,Struts负责显示层,Hibernate负责持久层,Spring负责中间的...
C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象
c3p0-0.9.5.2jar包 数据库连接池,java学习关于mysql必不可少的一部分,C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。
C3P0是一个开源的JDBC连接池,目前使用它的开源项目有Hibernate,Spring等。 数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从...
[Database-support-package]-数据库需要用到的-c3p0/dbcp/dbUtils工具支持包 [Hibernate]利用Hibernate进行一对多的级联操作-Web实例 [Java_MySQL_jar]-数据库连接支持包 [JavaMail]-收发邮件支持包 [Java_MySQL_jar...
里面包含JavaSE11与数据库MySQL8.0使用c3p0相连必须jar包,还有struts,spring,hibernate必须的jar包,也包含java9以上整合struts必须的三个jar包,还有struts与spring相连所需jar包,还包含ssh里需要用到的头标识
Hibernate3一个连接本机MySQL数据库的示例代码,使用了C3P0连接池
此项目sturts2+spring2.5+hibernate3.5+c3p0+log4j整合示例项目,数据库用的mysql5.0,代码注释详细,架构清晰,能帮助大家正确的理解如何快速整合ssh三个框架
及c3p0-0.9.1.2.jar, mysql-connector-java-5.1.10-bin.jar 。 当时写的时候用的是JDK1.4,没有在JDK1.5下做测试,但在jdk1.5下应该没什么大问题,最多出现语法错误。 用的UTF-8编码。 有问题可在下载页面的评论...
工程环境JDK :1.8.0_201 maven :3.6.1 IDE :Eclipse 4.12 mysql-connector-java :8.0.15 mysql :5.7 .28 C3P0 :0.9.5.3主要步骤c3p0.properties ,设置数据库连接参数和连接池基本参数等new一个Comb
struts2.3+hibernate4.1+spring3.1框架整合,采用c3p0连接mysql数据库,实现验证码登陆、curd功能、上传下载等功能。
配置了tomcat之后发现jndi好简单啊,可是碰到了hibernate该怎么做呢,本例详细解析
c3p0配置:mysql调试通过,oracle由于存在问题,未配置 spring配置式事务管理(jdk动态代理,每个service必须对应一个接口) BaseService里注入BaseDao 和transactionTemplate(用于编程式事务处理,只用于特殊...
[Database-support-package]-数据库需要用到的-c3p0/dbcp/dbUtils工具支持包 [Hibernate]利用Hibernate进行一对多的级联操作-Web实例 [Java_MySQL_jar]-数据库连接支持包 [JavaMail]-收发邮件支持包 [Java_MySQL...
这是一个Spring4.2.3+SpringMVC+Hibernate5.0.2整合后的Web Project,里面Jar包和配置文件齐全,下载下来即可投入...③ Hibernate required、C3P0、Two level cache、database driver(MySQL+Oracle) ④ JSTL ⑤ JSON
ssh整合所需的jar包,spring-4.2.4版本,c3p0连接池,mysql数据库,hibernate-5.0.7版本,struts-2.3.24版本, spring-mvc.xml文件,web.xml文件,spring-common.xml文件,Adc.hbm.xml文件