防止连接Mysql超时,JDBC探活配置
时间:2022-05-03
本文章向大家介绍防止连接Mysql超时,JDBC探活配置,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
我们知道Mysql有两个关于连接超时的参数,默认为8小时:
MySQL > show global variables like '%timeout%';
wait_timeout = 28800 |
非交互连接等待时间 |
---|---|
interactive_timeout = 28800 |
交互连接等待时间 |
MySQL > show processlist;
当connection空闲(Sleep)超过8小时,Mysql将自动断开该connection,而JDBC连接池并不知道该connection已经失效,如果这时有Client请求connection,JDBC将该失效的Connection提供给Client,将会造成异常。
一般会有5种处理方式:
1、MYSQL调大数据库超时参数:如果太大,可能导致连接数较多,引起性能下降
set global wait_timeout = 2073600;
set global interactive_timeout = 2073600;
2、JDBC配置Mysql连接URL重连机制
jdbc:mysql://localhost:3306/test?user=root&password=&autoReconnect=true
3、JDBC减少连接池内连接生存周期:使之小于所设置的wait_timeout 的值
<property name="maxIdleTime" value="1800" />
4、JDBC探活:每隔一段时间唤醒连接
<property name="preferredTestQuery" value="SELECT 1"/>
<property name="idleConnectionTestPeriod" value="300"/>
5、JDBC升级驱动版本
由于老版本有些功能不兼容,导致连接报错,可以升级到最新版本后再观察
下载地址:https://dev.mysql.com/downloads/connector/j/
JDBC主要参数说明:
<!--IP端口库用户密码等-->
<property name="jdbcUrl">
<property name="user">
<property name="password">
<!--连接池中保留的最小连接数。-->
<property name="minPoolSize" value="5" />
<!--连接池中保留的最大连接数。Default: 15 -->
<property name="maxPoolSize" value="20" />
<!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
<property name="maxIdleTime" value="1800" />
<!--当连接池中的连接耗尽的时候,一次同时获取的连接数。Default: 3 -->
<property name="acquireIncrement" value="2" />
<property name="maxStatements" value="1000" />
<property name="initialPoolSize" value="10" />
<!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
<property name="acquireRetryAttempts" value="30" />
<property name="breakAfterAcquireFailure" value="true" />
<!--定义所有连接测试都执行的测试语句。在使用连接测试的情况下select 1显著提高测试速度,比默认语句SHOW FULL TABLES FROM `dbname` LIKE 'PROBABLYNOT'效率高很多 -->
<property name="preferredTestQuery" value="SELECT 1"/>
<!--每300秒检查所有连接池中的空闲连接。Default: 0 -->
<property name="idleConnectionTestPeriod" value="300"/>
<!--每次把连接checkin到pool时,测试其有效性 -->
<property name="testConnectionOnCheckin" value="false"/>
<!--每次把连接从pool内checkout时,测试其有效性 -->
<property name="testConnectionOnCheckout" value="false"/>
<!--上面两个参数如果为true那么每个connection提交时都会校验其有效性,会造成至少多一倍的数据库调用,性能消耗较大,慎重使用,建议使用 idleConnectionTestPeriod或automaticTestTable等方法来提升连接测试的性能 -->
其他参数:
更多参数解读:
https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html
- 【自然框架】数据访问之精雕细琢(一)存储过程的参数
- 100w条记录分页,可以有多快?—— DataReader分页与SQL语句分页的对比测试(在线演示)
- Mimikatz小实验:黄金票据+dcsync
- 【自然框架】n级下拉列表框的原理
- 【自然框架】分享 n级联动下拉列表框
- GSM Hacking Part ②:使用SDR捕获GSM网络数据并解密
- 【自然框架】之数据访问 —— 再小的类库也需要设计。
- 【自然框架】之表单控件(一)实体类(Class)VS 字典(Dictionary)
- 跨平台后门Mokes现已加入OS X豪华午餐
- 【问底】严澜:数据挖掘入门——分词
- 机器学习-简单线性回归教程
- NSA(美国国安局)泄漏Exploit分析
- 详解Windows Shim的攻防利用
- 基于Github的源码白盒扫描工具Raptor
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解