`

mysql 连接池断开后自动连接

阅读更多

MySQL对所有连接的有效时间默认为28800秒,正好8小时,也就是说,如果一个连接8小时没有请求和操作,就会自动断开;但是对于 Hibernate来说,它的连接池并不知道它所管理的连接中是否有被MySQL断开的。如果一个程序要使用数据库连接,而Hibernte的连接池分配 一个已经被MySQL断开了的给程序使用,那么便会出现错误.以下是proxool连接池的解决方案

数据库连接池proxool(0.91),它有两个属性:一个是test-before-use ,还有一个是test-after-use,这两个属性就是在使用前和使用后都要进行对连接的检查,如果连接无效就扔掉再创建一个新的连接,它们的解释如下: 
test-before-use :
If you set this to true then each connection is tested (with whatever is defined in house-keeping-test-sql) before being served. If a connection fails then it is discarded and another one is picked. If all connections fail a new one is built. If that one fails then you get an SQLException saying so.
test-after-use:
If you set this to true then each connection is tested (with whatever is defined in house-keeping-test-sql) after it is closed (that is, returned to the connection pool). If a connection fails then it is discarded. 

 由于项目是spring+ibatis+struts

有关proxool的配置片段如下

web.xml

  <servlet-name>ServletConfigurator</servlet-name>
  <servlet-class>
    org.logicalcobwebs.proxool.configuration.ServletConfigurator
  </servlet-class>
  <init-param>
    <param-name>xmlFile</param-name>
    <param-value>WEB-INF/proxool.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
 proxool.xml放在WEB-INF下

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- the proxool configuration can be embedded within your own application's.
Anything outside the "proxool" tag is ignored. -->
<something-else-entirely>
  <proxool>
    <alias>dbname </alias>
    <driver-url></driver-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <driver-properties>
      <property name="user" value=""/>
      <property name="password" value=""/>
    </driver-properties>
    <maximum-connection-count>100</maximum-connection-count>
    <minimum-connection-count>10</minimum-connection-count>
    <house-keeping-sleep-time>90000</house-keeping-sleep-time>
    <maximum-new-connections>10</maximum-new-connections>
    <prototype-count>5</prototype-count>
    <test-before-use>true</test-before-use>  关键代码
    <test-after-use>true</test-after-use>
关键代码
    <house-keeping-test-sql>select 1 from dual</house-keeping-test-sql>
关键代码
  </proxool>

</something-else-entirely>

spring的applicationContext.xml

<bean id="datasource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName"
        value="org.logicalcobwebs.proxool.ProxoolDriver" />
    <property name="url" value="proxool.dbname " /> 和proxool.xml中的alias相同
</bean>

测试OK

同理其他连接池的解决方案

DBCP增加以下配置信息:

//set to 'select 1'

validationQuery = "select 1"

//set to 'true'

testWhileIdle = "true"

//some positive integer

timeBetweenEvictionRunsMillis = 3600000 //失效检查线程运行时间间隔,如果小于等于0,不会启动检查线程

//set to something smaller than 'wait_timeout'

minEvictableIdleTimeMillis = 18000000 //大于0 ,进行连接空闲时间判断,或为0,对空闲的连接不进行验证

//if you don't mind a hit for every getConnection(), set to "true"

testOnBorrow = "true"

C3P0增加以下配置信息:

//获取connnection时测试是否有效

testConnectionOnCheckin = true

//自动测试的table名称

automaticTestTable=C3P0TestTable

//set to something much less than wait_timeout, prevents connections from going stale

idleConnectionTestPeriod = 18000   //置一段时间后连接池自动测试执行,保持连接开放,

//set to something slightly less than wait_timeout, preventing 'stale' connections from being handed out

maxIdleTime = 25000

//if you can take the performance 'hit', set to "true"

testConnectionOnCheckout = true

分享到:
评论

相关推荐

    Tomcat6连接池配置详解(自动重连)

    详细介绍Tomcat6的连接池配置,且数据库断开连接池可以自动重连,一看便会。

    基于C++实现多线程连接池MySQL源码+项目说明+详细代码注释.zip

    基于C++实现多线程连接池MySQL源码+项目说明+详细代码注释.zip C++ 调用 MYSQL API 连接池 ## environment: * VS2022 * MySQL8.0.27 ## 高并发下频繁处理瓶颈 * 建立通信:`TCP三次握手` * 数据库服务器的`连接认证...

    Qt 多线程连接数据库——数据库连接池

    * 数据库连接池特点: * 获取连接时不需要了解连接的名字... * 连接断开了后会自动重连 * 当无可用连接时,获取连接的线程会等待一定时间尝试继续获取,直到取到有效连接或者超时返回一个无效的连接 * 关闭连接很简单

    基于 MySQL 协议,Swoole 开发的MySQL数据库连接池.zip

    而连接的建立、断开都由连接池自身来管理。 同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等。 也可以通过其自身的管理机制来监视...

    mysql连接的空闲时间超过8小时后 MySQL自动断开该连接解决方案

    MySQL 的默认设置下,当一个连接的空闲时间超过8小时后,MySQL 就会断开该连接,而 c3p0 连接池则以为该被断开的连接依然有效。在这种情况下,如果客户端代码向 c3p0 连接池请求连接的话,连接池就会把已经失效的...

    SMProxy MySQL数据库连接池 v1.3.1

    为您提供SMProxy MySQL数据库连接池下载,SMProxy(Swoole MySQL Proxy)一个基于 MySQL 协议,Swoole 开发的MySQL数据库连接池。原理:将数据库连接作为对象存储在内存中,当用户需要访问数据库时,首次会建立连接...

    易语言-Mysql线程池2.0模块

    改为断开Mysql连接句柄。 ②在连接池初始化时增加了每一个mysql句柄各执行一次 “SET NAMES 数据库编码”的sql语句方法,可以选择执行还是不执行,防止查询数据库时因编码问题出现乱码。如数据库是utf8编码,里面...

    Mybatis破MySql8小时断线问题1

    这时如果使用jdbc继续使用之前的连接,则会收到以下异常:mysql允许设置闲置时间,默认是8小时,最大是1年。大部分客户端都使用连接池以提高性能,如果用户访问

    MYSQL优化详情大全

    避免频繁的连接和断开:频繁的连接和断开对数据库性能影响较大,可以使用连接池来管理数据库连接,减少连接开销。 优化服务器配置:根据服务器的硬件资源和数据库的需求,合理配置服务器参数,如缓冲区大小、并发...

    mysql5.1中文手册

    连接与断开服务器 3.2. 输入查询 3.3. 创建并使用数据库 3.3.1. 创建并选择数据库 3.3.2. 创建表 3.3.3. 将数据装入表中 3.3.4. 从表检索信息 3.4. 获得数据库和表的信息 3.5. 在批处理...

    MySQL 5.1参考手册

    3.1. 连接与断开服务器 3.2. 输入查询 3.3. 创建并使用数据库 3.3.1. 创建并选择数据库 3.3.2. 创建表 3.3.3. 将数据装入表中 3.3.4. 从表检索信息 3.4. 获得数据库和表的信息 3.5. 在批处理模式下使用mysql 3.6. ...

    MySQL 5.1参考手册中文版

    3.1. 连接与断开服务器 3.2. 输入查询 3.3. 创建并使用数据库 3.3.1. 创建并选择数据库 3.3.2. 创建表 3.3.3. 将数据装入表中 3.3.4. 从表检索信息 3.4. 获得数据库和表的信息 3.5. 在批处理模式下使用mysql ...

    mysql数据库my.cnf配置文件

    # 这个值(默认8)表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中, # 如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,...

    MYSQL中文手册

    3.1. 连接与断开服务器 3.2. 输入查询 3.3. 创建并使用数据库 3.3.1. 创建并选择数据库 3.3.2. 创建表 3.3.3. 将数据装入表中 3.3.4. 从表检索信息 3.4. 获得数据库和表的信息 3.5. 在批处理模式下使用mysql...

    基于MySQL的数据库中间件Meituan-DBProxy.zip

    当连接池中的空闲连接闲置超过一定时间后,自动释放连接。由参数 db-connection-idle-timeout 控制 增加客户端连接的keepalive机制,避免网络异常后释放已断开的连接 完善管理日志,增加了管理命令...

    mysql官方中文参考手册

    3.1. 连接与断开服务器 3.2. 输入查询 3.3. 创建并使用数据库 3.3.1. 创建并选择数据库 3.3.2. 创建表 3.3.3. 将数据装入表中 3.3.4. 从表检索信息 3.4. 获得数据库和表的信息 3.5. 在批处理模式下使用mysql 3.6. ...

    MYSQL线程操作模块 带心跳池 永不断开 (自用)-易语言

    心跳是为了防止 MYSQL 断开 ,一直保持连接 (有些新手不懂 大神勿喷) 表达能力有限 废话就不多说了 下面源码 (带有使用例子)

    SMProxy-PHP

    SMProxy(Swoole MySQL Proxy)一个基于 MySQL 协议,Swoole 开发的MySQL数据库连接池。 原理: 将数据库连接作为对象存储在内存中,当用户需要访问数据库时,首次会建立连接,后面并非建立一个新的连接,而是从连接...

    MySQL5.1参考手册官方简体中文版

    3.1. 连接与断开服务器 3.2. 输入查询 3.3. 创建并使用数据库 3.3.1. 创建并选择数据库 3.3.2. 创建表 3.3.3. 将数据装入表中 3.3.4. 从表检索信息 3.4. 获得数据库和表的信息 3.5. 在批处理模式下使用mysql 3.6. ...

Global site tag (gtag.js) - Google Analytics