关于hibernate 利用c3p0连接mysql 数据库
来源:互联网 发布:mac10.7.5软件下载 编辑:程序博客网 时间:2024/04/30 01:30
最近项目用到了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>
通过以上修改检测一段时间没有出现同样问题,问题解决!总结解决问题的三个步骤:收集相关信息、重现问题、解决测试。
- 关于hibernate 利用c3p0连接mysql 数据库
- 关于hibernate 利用c3p0连接mysql 数据库
- 关于hibernate 利用c3p0连接mysql 数据库
- 关于hibernate 利用c3p0连接mysql 数据库
- 关于hibernate 利用c3p0连接mysql 数据库
- 关于hibernate配置c3p0连接池连接mysql问题
- c3p0连接MySql数据库
- mysql利用hibernate连接数据库出错
- 使用c3p0连接mysql数据库
- 如何利用连接池C3P0连接数据库
- Hibernate(C3P0)连接MySQL数据库,MySQL连接超时断开的问题
- 利用C3P0连接池连接mysql数据库,超过几小时后连接报wait_timeout错误
- hibernate C3P0数据源 连接oracle数据库
- DBCP和C3P0连接MySQL数据库
- Hibernate连接mysql数据库
- Hibernate连接mysql数据库
- hibernate连接mysql数据库
- Hibernate 连接数据库[Mysql]
- c#获取MAC地址 硬盘序列号
- phpcms2008教程收集帖
- NetApp的生意经
- struts2:在Action类中获得HttpServletResponse对象的四种方法
- .Net线程间通信的异步机制(转)
- 关于hibernate 利用c3p0连接mysql 数据库
- PCDM:从“如何做”到“做什么”
- TImage有关的2个知识点
- 安装sql挂起问题
- PLM:英业达的幕后英雄
- 观察者与被观察者模式实现模型
- 图书管理(转载)
- Struts2:使用Validation框架验证数据
- 进程和线程的区别