采用C3P0连接池解决spring+hibernate+mysql 访问空闲8小时后自动断开连接的问题

来源:互联网 发布:a 算法原理分析 编辑:程序博客网 时间:2024/04/29 23:02

最近将自己刚做的网站放到服务器上,但是每隔一段时间就发现访问数据库的时候会报错:

javax.servlet.ServletException: org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.TransactionException: JDBC begin failed:
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)

 

原因是在MySQL数据库中,如果一个连接8小时没有请求和操作,就会自动断开,从而导致一些基于数据库连接的应用程序,特别是 WEB 应用程序出错。

上网查了一下资料,找到了一个简单、且有效的办法,就是用C3P0连接池代替默认的连接池。

 

下载C3P0的jar包放到lib目录下

下载地址:http://sourceforge.net/projects/c3p0/files/c3p0-bin/c3p0-0.9.1.2/c3p0-0.9.1.2.bin.tgz

 

将applicationContext.xml文件中的dataSource改成C3P0的连接方式

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
  <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
  <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/appleflying"></property>
  <property name="user" value="root"></property>
  <property name="password" value="mysql"></property>
  
  <property name="maxPoolSize" value="40"></property>
  <property name="minPoolSize" value="1"></property>
  <property name="initialPoolSize" value="1"></property>
  <property name="maxIdleTime" value="20"></property>
 </bean>

原创粉丝点击