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

2023-11-16

前面的文章中,我介绍了修改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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Android 自定义视图不能以正确的方式处理透明度/alpha

    我正在绘制自定义视图 在此视图中 我使用两个不同的绘画和路径对象在画布上绘画 我基本上是在绘制两个重叠的形状 添加 Alpha 后 视图中重叠的部分比图像的其余部分更暗 这是不希望的 但我不知道如何解决它 这是我的代码片段 用于展示我如何在
  • 使用 RecyclerView 适配器在运行时更改布局屏幕

    我有两个布局文件 如下所示 如果列表中存在数据 则我显示此布局 当列表为空时 我会显示此布局 现在我想在运行时更改布局 当用户从列表中删除最后一项时 我想将布局更改为第二张图片中显示的 空购物车布局 In getItemCount Recy
  • Condition 接口中的 signalAll 与对象中的 notificationAll

    1 昨天我才问过这个问题条件与等待通知机制 https stackoverflow com questions 10395571 condition vs wait notify mechanism 2 我想编辑相同的内容并在我的问题中添加
  • 主线程如何在该线程之前运行?

    我有以下代码 public class Derived implements Runnable private int num public synchronized void setA int num try Thread sleep 1
  • 如何将 android.net.Uri 转换为 java.net.URL? [复制]

    这个问题在这里已经有答案了 有没有办法从Uri to URL 我正在使用的库需要这个 它only接受一个URL但我需要在我的设备上使用图像 如果该方案的Uri is http or https new URL uri toString 应该
  • Git 无法识别重命名和修改的包文件

    我有一个名为的java文件package old myfile java 我已经通过 git 提交了这个文件 然后我将我的包重命名为new所以我的文件在package new myfile java 我现在想将此文件重命名 和内容更改 提交
  • 在 MySQL 数据库中保持 TEXT 字段唯一的最佳方法

    我想让 TEXT 字段的值在我的 MySQL 表中唯一 经过小型研究 我发现由于性能问题 每个人都不鼓励在 TEXT 字段上使用 UNIQUE INDEX 我现在想用的是 1 创建另一个字段来包含 TEXT 值的哈希值 md5 text v
  • 无法加载或查找主类,可以在命令行中使用,但不能在 IDE 中使用[重复]

    这个问题在这里已经有答案了 在将其标记为重复之前 请先听我说完 我正在尝试使用 gradle 导入一个 java 项目 功能齐全 适用于所有其他笔记本电脑 没有问题 我的项目 100 正常运行 适用于所有其他笔记本电脑 当我的笔记本电脑被重
  • 如何将 Jfreechart(饼图)添加到 netbeans 的面板中

    我正在使用 netbeans gui 编辑器 并且正在尝试添加一个本身位于内部框架中的 Jfreechart 并且这个内部框架我想将其添加到面板中 正如您在此图中看到的那样 抱歉 我无法直接发布图像 因为我新手 http www flick
  • Spring Security OAuth2简单配置

    我有一个简单的项目 需要以下简单的配置 我有一个 密码 grant type 这意味着我可以提交用户名 密码 用户在登录表单中输入 并在成功时获得 access token 有了该 access token 我就可以请求 API 并获取用户
  • 在 Spring Boot Actuator 健康检查 API 中启用日志记录

    我正在使用 Spring boot Actuator APIproject https imobilenumbertracker com 拥有一个健康检查端点 并通过以下方式启用它 management endpoints web base
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • 使用函数的 SQL 查询 - 如何获取列表的最大计数

    如何查询 MAXIMUM COUNT 交易次数 我的代码如下 SELECT customer id COUNT customer id FROM rental GROUP BY customer id HAVING MAX COUNT cu
  • 如何通过 Inno Setup for NetBeans 使用自定义 .iss 文件

    我将 Inno Setup 5 与 NetBeans 8 一起使用 并且我已经能够创建一个安装程序来安装该应用程序C users username local appname 但是我希望将其安装在C Programfiles 我如何在 Ne
  • 如何在 Quartz 调度程序中每 25 秒运行一次?

    我正在使用 Java 的 Quartz Scheduling API 你能帮我使用 cron 表达式每 25 秒运行一次吗 这只是一个延迟 它不必总是从第 0 秒开始 例如 序列如下 0 00 0 25 0 50 1 15 1 40 2 0
  • JVM:是否可以操作帧堆栈?

    假设我需要执行N同一线程中的任务 这些任务有时可能需要来自外部存储的一些值 我事先不知道哪个任务可能需要这样的值以及何时 获取速度要快得多M价值观是一次性的而不是相同的M值在M查询外部存储 注意我不能指望任务本身进行合作 它们只不过是 ja
  • 哪个集合更适合存储多维数组中的数据?

    我有一个multi dimensional array of string 我愿意将其转换为某种集合类型 以便我可以根据自己的意愿添加 删除和插入元素 在数组中 我无法删除特定位置的元素 我需要这样的集合 我可以在其中删除特定位置的数据 也
  • Hibernate 和可序列化实体

    有谁知道是否有一个框架能够从实体类中剥离 Hibernate 集合以使它们可序列化 我查看了 BeanLib 但它似乎只进行实体的深层复制 而不允许我为实体类中的集合类型指定实现映射 BeanLib 目前不适用于 Hibernate 3 5
  • 嵌入式 Jetty - 以编程方式添加基于表单的身份验证

    有没有一种方法可以按如下方式以编程方式添加基于表单的身份验证 我用的是我自己的LdapLoginModule 最初我使用基本身份验证并且工作正常 但现在我想在登录页面上进行更多控制 例如显示徽标等 有没有好的样品 我正在使用嵌入式 jett
  • 使用 PHP 将 latin1_swedish_ci 转换为 utf8

    我有一个数据库 里面充满了类似的值 Dhaka 应该是 Dhaka 因为我在创建数据库时没有指定排序规则 现在我想修复它 我无法从最初获取数据的地方再次获取数据 所以我在想是否可以在 php 脚本中获取数据并将其转换为正确的字符 我已将数据

随机推荐

  • linux安装spec编译器,RPM包制作之Spec文件参数详解

    看这篇文章的人基本都有一个想法 就是 劳资不想用YUM的安装 不是版本太低就是文件分布太野路子 此时我们需要自己订制软件包的需求 我们会把一些源码包按照我们的需求来做成rpm包 其中的Spec文件是制作RPM包的核心 下面我们以制作NGIN
  • 数据库的三大范式及其重要性,详细易懂

    目录 一 前言 二 三大范式 2 1 第一范式 1NF 列不可再分 2 2 第二范式 2NF 主键关系 2 3 第三范式 3NF 外键关系 三 为什么要遵循三大范式 一 前言 数据库是现代信息系统中的核心组成部分 它的设计和优化对系统的性能
  • 8421码

    8421码是中国大陆的叫法 8421码是BCD代码中最常用的一种 在这种编码方式中每一位二值代码的1都是代表一个固定数值 把每一位的1代表的十进制数加起来 得到的结果就是它所代表的十进制数码 二进制 1 1 1 1 十进制 8 4 2 1
  • 【vue】Failed to resolve component: van-cell If this is a native custom element, make sure to exclude

    问题描述 写vue引入vant组件遇到的问题 Failed to resolve component van cell If this is a native custom element make sure to exclude it f
  • 【华为OD机试真题2023 JS】取出尽量少的球

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 取出尽量少的球 时间限制 1s 空间限制 32MB 限定语言 不限 题目描述 某部门开展Family Day开放日活动 其中有个从桶里取球的游戏 游戏规则如下 有N个容量一样的小
  • 使用truss、strace或ltrace诊断软件的"疑难杂症"

    作者 李凯斌 2005 01 18 11 03 24 来自 IBM DW中国 进程无法启动 软件运行速度突然变慢 程序的 Segment Fault 等等都是让每个Unix系统用户头痛的问题 本文通过三个实际案例演示如何使用truss st
  • 安卓大作业 图书管理APP

    系列文章 安卓大作业 图书管理APP 文章目录 系列文章 1 背景 2 功能 3 源代码获取 1 背景 本次实验设计的是一个图书管理系统 系统的整体目录如下 2 功能 针对于每个java类或者Activity进行说明 1 Book java
  • 最坏的时刻已经过去,静待重新走向繁荣

    今年三 四 五 六 七月份 每周客户拜访数量一直比较低 期间和客户 友商 用户持续交流 大家普遍感受到今年特别难 难于上青天 可是 我和老家做小老板亲戚朋友沟通 他们的感受没那么明显 只是觉得今年比往年差些 没一二线城市感受那么明显 进入八
  • Cloud Native和微服务

    一 Cloud Native介绍 Cloud Native是Matt Stine提出的一个概念 它是一个思想的集合 包括DevOps 持续交付 Continuous Delivery 微服务 MicroServices 敏捷基础设施 Agi
  • linux实例显示blocked,(11)ceph 告警:1 slow ops, oldest one blocked for

    1 ceph告警提示 1 slow ops oldest one blocked for email protected ceph s cluster id 58a12719 a5ed 4f95 b312 6efd6e34e558 heal
  • Ubuntu与Windows系统之间进行远程访问和文件的传输

    Ubuntu16 04系统之间和ubuntu与Windows10之间进行SSH远程访问和文件互传 一 Ubuntu 系统之间进行文件互传 传输的是文件夹 传输的是文件 二 ubuntu与Windows10之间进行SSH远程访问和文件互传 补
  • bugku 文件包含2

    页面很正常 url里面有一个file参数 看一下源码 有一个upload php看一下 文件上传 题目是文件包含 就想到了前面做的的上传图片马 用文件包含连接 试一试 不知到哪里出问题了 看一下上传的内容
  • python 美国总统身高统计与分析

    美国总统身高统计与分析 1 安装依赖 2 下载数据集 3 数据处理 4 结果展示 1 安装依赖 pip install pandas pip install numpy pip install matplotlib 2 下载数据集 链接 h
  • PHICOMM路由器无线扩展的设置方法(吐槽一下)

    家里使用的是电信宽带 电信光纤猫有两个网口 网口1直连家里的电视 网口2连接了一部TPLINK路由器 设置了无线wifi 供家里的手机使用wifi 最近在卧室新增了一台台式电脑 用来在家里业余时间学习的 从客厅到卧室距离不长 但是因为家里面
  • 了解以及区分物理机,虚拟机(hypervisor/VMM) 和 容器(Docker)的适用场景

    了解以及区分物理机 虚拟机hypervisor VMM 和 容器Docker的适用场景 Abbreviations 物理机和虚拟机以及容器的区别 动机motivation 为什么要有虚拟机 物理机 虚拟机 容器 虚拟机的种类以及他们的本质区
  • 【Eigen】基本和常用函数

    文章目录 简介 找不到头文件 Eigen 中矩阵的定义 Eigen 中矩阵的使用方法 Eigen 中常用矩阵生成 Eigen 中矩阵分块 Eigen 中矩阵元素交换 Eigen 中矩阵转置 Eigen 中矩阵乘积 Eigen 中矩阵元素操作
  • Selenium自动化测试 —— 通过cookie绕过验证码的操作!

    验证码的处理 对于web应用 很多地方比如登录 发帖都需要输入验证码 类型也多种多样 登录 核心操作过程中 系统会产生随机的验证码图片 进行验证才能进行后续操作 解决验证码的方法如下 1 开发做个万能验证码 推荐 2 测试环境关闭验证码功能
  • Appium+Python自动化测试(一)--环境搭建

    Appium简介 Appium是一个自动化测试开源工具 支持IOS和Android平台上的移动原生应用 移动Web应用和混合应用 所谓的 移动原生应用 是指那些用IOS或者Android SDK写的应用 所谓的 移动Web应用 是指使用移动
  • VulnHub_Jangow: 1.0.1

    本文内容涉及程序 技术原理可能带有攻击性 仅用于安全研究和教学使用 务必在模拟环境下进行实验 请勿将其用于其他用途 因此造成的后果自行承担 如有违反国家法律则自行承担全部法律责任 与作者及分享者无关 主机信息 kali 192 168 31
  • Mysql超时重连解决方案3: 配置c3p0连接池(终极方案)

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