`

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

分享到:
评论

相关推荐

    mysql连接池java源码

    MySQL连接池在Java应用开发中扮演着至关重要的角色,它是一种管理数据库连接的机制,能够有效地提高数据库操作的性能和效率。在这个项目中,我们看到的是一个纯手工编写的Java源码实现,不依赖任何外部数据库驱动,...

    mysql数据连接池

    MySQL 数据连接池是一种数据库管理技术,它在应用服务器和数据库之间起到了中介的作用,优化了数据库的连接使用,提高了系统的性能和资源利用率。在Java、Python等编程语言中,都有相应的库或框架支持数据连接池的...

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

    这是实现自动重连的关键配置之一,一旦连接断开,连接池会尝试通过执行该查询来重新建立连接。 如果使用其他类型的数据库,只需修改`url`和`driverClassName`即可。 #### 三、配置上下文参数 **2. 在`conf/...

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

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

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

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

    MySQL+Hibernate下连接空闲8小时自动断开问题解决方案.pdf

    使用 DriverManagerConnectionProvider 连接池机制时,存在一个缺陷,即连接池中的连接在空闲8小时后将自动断开。这是因为 DriverManagerConnectionProvider 使用了 Java 的 DriverManager 来管理数据库连接,而 ...

    使用数据库连接池proxool配置mysql数据库

    通过使用Proxool,我们可以设置连接的生命周期,确保即使超过了MySQL的默认超时时间,连接池也能自动检测并重置这些连接。 **3. 配置Proxool连接池** 配置Proxool主要涉及以下几个步骤: - **创建配置文件**:通常...

    c3p0数据库连接池

    当应用需要访问数据库时,不再直接创建新的连接,而是从连接池中获取一个已存在的连接,用完后再归还,从而减少了数据库连接的创建和销毁过程。 2. c3p0数据源:c3p0数据源...

    MySQL+Hibernate下连接空闲8小时自动断开问题解决方案.docx

    MySQL+Hibernate 连接空闲8小时自动断开问题解决方案 知识点1: Hibernate 的连接池机制 在 Hibernate 中,默认情况下 使用的是 DriverManagerConnectionProvider,这是一个简单的连接池机制。它将打开的连接缓存在...

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

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

    MySQL数据库服务器下C3P0连接池的配置.pdf

    查阅相关文档后发现,造成报错的原因是:MySQL的默认设置为当一个连接的空闲时间超过8小时后,MySQL就会断开该连接,而C3P0连接池则以为被断开的连接依然有效。在这种情况下,如果客户端代码向C3P0连接池请求连接的...

    连接池 所有jar包

    连接池技术应运而生,旨在解决频繁创建和关闭数据库连接导致的性能问题。本篇将详细介绍两种主流的Java连接池实现:C3P0和Druid,以及辅助工具DBUtils。 首先,C3P0是一款开源的JDBC连接池,它实现了数据源和JNDI...

    JAVA 开发数据库连接池jar包

    连接池的基本原理是预先创建一定数量的数据库连接,并存储在一个池中,当应用程序需要时,可以从池中获取连接,使用完毕后再归还,而不是每次操作数据库都创建新的连接。这种方式减少了频繁创建和关闭连接的开销,...

    基于PHP的SMProxy(MySQL数据库连接池).zip

    6. **性能优化**:通过使用连接池,可以减少数据库连接的建立和断开次数,降低系统资源消耗,提高系统的吞吐量和并发处理能力。 7. **配置管理**:SMProxy可能需要一些配置参数,例如最大连接数、最小连接数、超时...

    定时连接池

    1. **连接池管理**:C3P0能够自动创建、管理和回收数据库连接,确保在需要时能快速获取到连接,并在使用完毕后及时释放,降低系统资源消耗。 2. **连接测试**:在分配给应用程序之前,C3P0会检查连接的有效性,确保...

    易语言源码 Postgre SQL 连接池

    易语言源码 Postgre SQL 连接池。基于 http://www.sanye.cx/?id=12020 的源码 二次开发...封装了一些高级方法..包括,连接池+查询缓存+不知道真假的储存过程+慢查询记录。使用源码使用了E2EE支持库(模块部分思路借鉴...

    基于jdbc的连接池开发技术

    4. **连接获取与释放**:应用程序从连接池中获取连接进行数据库操作,并在完成后将连接归还连接池。 #### 示例代码 ```java // 加载JDBC驱动 Class.forName("com.mysql.jdbc.Driver"); // 读取配置文件 ...

    c3p0连接池jar包

    4. 连接池扩展性:C3P0支持多种数据库驱动,如MySQL、Oracle、PostgreSQL等,只需提供对应的JDBC驱动即可使用。 5. 配置灵活性:C3P0提供大量的可配置参数,用户可以根据实际需求调整,例如初始化连接数、最大连接...

Global site tag (gtag.js) - Google Analytics