前面的文章中,我介绍了修改mysql默认超时时间和配置proxool连接池的方法来解决Mysql超时重连的问题。方案1不推荐,它并没有从根本上解决问题;方案2可用,但配置相对复杂;所有才有了方案3,它既解决了关键问题,并且配置简单易懂。

c3p0连接池的testConnectionOnCheckout属性,类似于autoReconnect属性可自动保持数据库的连接,在获取连接时先检查连接是否有效(即检查Connection是否被mysql数据库关闭了),如果连接无效就重新建立一个新的连接。

C3P0连接池配置如下:

1、下载相关JAR包;

在Maven Repository中下载c3p0相关jar包,将c3p0-0.9.2.1.jar 拷贝至项目中。

2、在hibernate配置文件中,添加c3p0连接池配置,配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC  "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>  <session-factory><!-- 数据库方言 --><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><!-- 数据库JDBC驱动类名 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>     <!-- 数据库连接用户名 --><property name="hibernate.connection.username">root</property><!-- 数据库连接密码 --><property name="hibernate.connection.password">123456</property><!-- 数据库连接地址 --><property name="hibernate.connection.url">jdbc:mysql://localhost:3306/testDB</property><!-- ddl语句自动建表 -->  <property name="hibernate.hbm2ddl.auto">update</property><!-- 输出所有SQL语句到控制台 --><property name="show_sql">false</property><!-- 为"当前"Session指定一个(自定义的)策略 --><property name="current_session_context_class">thread</property><property name="hibernate.session.events.log">false</property><!-- c3p0连接池配置 --><property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property><!-- 最大连接数。Hibernate默认为100 --><property name="hibernate.c3p0.max_size">20</property><!-- 最小连接数。Hibernate默认为1 --><property name="hibernate.c3p0.min_size">5</property><!-- 连接超时时间(单位为秒),超过此时间就从连接池中移除一个空闲的连接。Hibernate默认为0,永不过期 --><property name="hibernate.c3p0.timeout">50000</property><!-- 被缓存的预编译语句数量。Hibernate默认为0,缓存不可用-->  <property name="hibernate.c3p0.max_statements">100</property><!-- 一个连接被自动验证前的闲置时间(单位为秒)。Hibernate默认为0 -->  <property name="hibernate.c3p0.idle_test_period">3000</property><!-- 当连接池耗尽并接收到新的连接请求时,新增连接的数量 --><property name="hibernate.c3p0.acquire_increment">2</property><!-- 当连接释放时,校验连接的有效性 --><property name="hibernate.c3p0.testConnectionOnCheckout">true</property>  <!-- 注册ORM映射文件 -->  <mapping class="com....." />  </session-factory>
</hibernate-configuration>  

上面配置中最重要的就是hibernate.c3p0.testConnectionOnCheckout这个属性,它保证每次取出连接时都会检查该连接是否被关闭,如果被关闭,则重新建立连接。

简单两步就搞定了mysql超时自动重连的问题了。

3、测试验证

①修改mysql默认超时time,超时参数设置的比较小(设置为2min)

SET GLOBAL wait_timeout=120;
SET GLOBAL interactive_timeout=120;SHOW GLOBAL VARIABLES LIKE '%timeout%';

②启动web工程,登录系统,然后等待2分钟以上,再次操作系统检查是否会报mysql连接错误

经过验证,发现c3p0连接池配置能有效解决mysql超时重连问题。

参阅文档:

hibernate配置参数详解:

https://blog.csdn.net/javahuangfang/article/details/8269314

c3p0常用配置参数:

https://blog.csdn.net/zhanghanlun/article/details/80918422

Mysql超时重连解决方案3: 配置c3p0连接池(终极方案)相关推荐

  1. spring配置c3p0连接池、spring的声明式事务管理

    一.spring配置c3p0连接池: 1.导入maven依赖: <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 --> & ...

  2. Hibernate配置C3P0连接池(在配好基本的hibernate配置下使用)

    拷贝jar包 找到我们的hibernate安装包,在lib目录下找到optional目录,打开c3p0文件,拷贝里面的jar包到eclipse里 写一个测试类,代码入下 public class C3 ...

  3. MyBatis配置C3P0连接池

    这两天学到Mybatis感觉就要疯了,第一次接触,我是不是应该写点笔记,下面呢,记录一下连接池的配置,防止忘了. 第一步,二话不说,先导入所需jar包(如图所示三个) 第二步,继承UnpooledDa ...

  4. hibernate4配置c3p0连接池报错

    在hibernate的xml文件中配置c3p0连接池时,运行报错: java.lang.ClassNotFoundException: Could not load requested class : ...

  5. Hibernate 配置C3P0 连接池

    第一步在hibernate.cfg.xml配置 <!-- 连接池 --><property name="hibernate.connection.provider_clas ...

  6. Hibernate中配置C3P0连接池

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 转自:h ...

  7. 解决spring配置c3p0连接池,tomcat无法正常启动

    为什么80%的码农都做不了架构师?>>>    今天下午收到一名网友的在线求助.先简要描述一下问题的背景: Windows平台,tomcat应用服务器, Oracle数据库,应用架构 ...

  8. 配置springboot使用c3p0连接池

    为什么要使用c3p0? 使用springboot默认的数据源配置方式: spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: j ...

  9. Spring c3p0连接池配置以及出错原因

    用的jar包 com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar 配置: 注意:如果出错原因(1)很有可能c3p0-config.xml中的配置文件出现问 ...

最新文章

  1. sqlserver 2014使用时有Cannot find one or more components
  2. 关于MYSQL中like 检索汉字问题。
  3. sql getdate() 时间格式设置
  4. Tasker文件夹说明
  5. JAVA CGI 远程代码执行_Apache Tomcat CVE-2019-0232 远程代码执行漏洞
  6. .NET Core Runtime vs .NET Framework Runtime
  7. jboss8日志级别设置_罐中研讨会:设置JBoss BRMS全日研讨会
  8. 写web项目时出现的错误:来自“http://localhost:63342/Demo/test01/day0618/css/a.css”的资源已被阻止,因为 MIME 类型(“text/html”)
  9. 联想控制计算机软件,联想网络控制工具
  10. The Tao of Programing-编程之道
  11. python输出9*9口诀表_python 9*9 乘法表
  12. 搭建 Kodbox 私有云教程
  13. error in opening zip file
  14. 项目管理知识体系指南 (六)
  15. Arduino常用的附加开发版管理器网址
  16. Java 身份证验证(IdCardVerification)
  17. 王者里的高清绝美海报(别再用黑乎乎的背景了)
  18. 方差、协方差、四分位差笔记
  19. zookeeper的zab协议工作原理之原子广播
  20. MACOM观点:5G网络形势下的光通讯需求有哪些?

热门文章

  1. 讨论面向对象及方法学的特点?为什么要用面向对象方法开发软件?
  2. mmdetection训练voc数据集
  3. Verilog 语言细节
  4. golang 扇入扇出以及通知退出机制
  5. 《软件工程导论第6版》--张海藩 牟永敏 课后答案及其详解 第6章 详细设计
  6. 1/2/3/4/5G多址接入技术(FDMA、TDMA、CDMA、OFDMA、新型多址技术)
  7. [一图一世界] 从2017年Amazon年Q3财报看市场趋势
  8. 设置Windows与Linux共享文件夹
  9. VHDL实现四位加法器
  10. 江苏自考计算机免考与论文答辩,江苏自考毕业答辩一年有几次?答辩难吗?