`
guoc
  • 浏览: 29999 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java的mysql连接池

阅读更多

可从官网下载最新版本 http://proxool .sourceforge.net

让Proxool连接池支持自动重连接
    项目使用的连接池是Proxool,有一个问题,如果连接池在运行当中,出现网络或者数据库故障而无法连接到数据库,在恢复正常以后,由于连接是在连接池中持久保存的,会出现连接仍然不可用的情况,这时连接池里的连接实际上都是坏连接,怎么让连接池可以自动重连清除这些坏连接呢?
让Proxool连接池支持自动重连接
    其实只要配置了test-before-use 参数,即每次取出连接都检查连接是否可用,就可以做到让连接池实现在故障恢复后自动重连接。实例配置文件如下:

<proxool>
    <alias>pool</alias>
    <driver-url> jdbc:mysql://localhost:3306/cds </driver-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <driver-properties>
        <property name="user" value="vcom" />
        <property name="password" value="vcom" />
        <property name="autoReconnect" value="true" />
    </driver-properties>
    <minimum-connection-count>1</minimum-connection-count>
    <maximum-connection-count>8</maximum-connection-count>
    <prototype-count>1</prototype-count>
    <test-before-use>true</test-before-use>
    <house-keeping-sleep-time>60000</house-keeping-sleep-time> 
    <house-keeping-test-sql>select CURRENT_DATE from dual</house-keeping-test-sql>
</proxool>

需要注意一点,对于Mysql数据库还必须在连接参数里加上autoReconnect=true 参数,否则即使打开了test-before-use 参数,仍然不能重连接!

===========================================

首先在src目录下创建属性配置文件

proxool.properties

jdbc-0.proxool.alias=test
jdbc-0.proxool.driver-url=jdbc:mysql://localhost:3306/test
jdbc-0.proxool.driver-class=com.mysql.jdbc.Driver
jdbc-0.user=root
jdbc-0.password=coship
jdbc-0.proxool.house-keeping-test-sql=select *
jdbc-0.proxool.maximum-connection-count=10
jdbc-0.proxool.minimum-connection-count=5

在工程中导入一下几个包
proxool-0.9.1.jar
proxool-cglib.jar
commons-logging.jar
mysql-connector-java-5.1.6-bin.jar

编写下面的应用程序

package test.pool;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import java.util.ResourceBundle;

import org.logicalcobwebs.proxool.ProxoolException;
import org.logicalcobwebs.proxool.configuration.PropertyConfigurator;

public class mysqlcon {

/**
* @param args
*/
public static void main(String[] args) {
   Connection conn = null;
   Statement sta=null;
   ResultSet rs=null;
   String sql="insert into test values ('a','a')";
   try {
    try {
     //PropertyConfigurator.configure(mysqlcon.class.getResource("/")+"proxool.properties");
     Properties pro=new Properties();
     ResourceBundle resource = ResourceBundle.getBundle("proxool");
     pro.put("jdbc-0.proxool.alias",resource.getString("jdbc-0.proxool.alias"));
     pro.put("jdbc-0.proxool.driver-url",resource.getString("jdbc-0.proxool.driver-url"));
     pro.put("jdbc-0.proxool.driver-class",resource.getString("jdbc-0.proxool.driver-class"));
     pro.put("jdbc-0.user",resource.getString("jdbc-0.user"));
     pro.put("jdbc-0.password",resource.getString("jdbc-0.password"));
     pro.put("jdbc-0.proxool.house-keeping-test-sql",resource.getString("jdbc-0.proxool.house-keeping-test-sql"));
     pro.put("jdbc-0.proxool.maximum-connection-count",resource.getString("jdbc-0.proxool.maximum-connection-count"));
     pro.put("jdbc-0.proxool.minimum-connection-count",resource.getString("jdbc-0.proxool.minimum-connection-count"));
     PropertyConfigurator.configure(pro);
    } catch (ProxoolException e) {
     e.printStackTrace();
    }
    conn = DriverManager.getConnection("proxool.test");
    sta=conn.createStatement();
    rs=sta.executeQuery("select * from test");
    while(rs.next()) {
    System.out.println(rs.getString("name")+" "+rs.getString("password"));
    }
   } catch (SQLException e) {
    e.printStackTrace();
   }finally{
    try {
     rs.close();
     sta.close();
     //conn.close();
    } catch (SQLException e) {
     e.printStackTrace();
    }
   }
}
}

======================================

<?xml version="1.0" encoding="UTF-8"?> 
    <!-- 
        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>jdbc:oracle:thin:@127.0.0.1:1521:testdb</driver-url><!--url连接串--> 
        <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> <!--驱动类--> 
        <driver-properties> 
            <property name="user" value="username" /> <!--用户名--> 
            <property name="password" value="password" /><!--密码--> 
        </driver-properties>  
        <!--最大连接数(默认5个),超过了这个连接数,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定 --> 
        <maximum-connection-count>100</maximum-connection-count>  
        <!--最小连接数(默认2个)--> 
        <minimum-connection-count>10</minimum-connection-count>  
        <!--proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 默认30秒--> 
        <house-keeping-sleep-time>90000</house-keeping-sleep-time> 
        <!--没有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受--> 
        <maximum-new-connections>10</maximum-new-connections>  
        <!--最少保持的空闲连接数(默认2个)--> 
        <prototype-count>5</prototype-count>  
        <!--在使用之前测试--> 
        <test-before-use>true</test-before-use> 
        <!--用于保持连接的测试语句 --> 
        <house-keeping-test-sql>select sysdate from dual</house-keeping-test-sql> 
    </proxool> 
</something-else-entirely>

分享到:
评论

相关推荐

    mysql连接池java源码

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

    java连接mysql数据库连接池demo

    Java连接MySQL数据库通常涉及到几个关键知识点,包括JDBC(Java Database Connectivity)、数据库驱动、数据库连接池以及具体的数据库操作。在"java连接mysql数据库连接池demo"这个项目中,我们可以深入探讨以下几个...

    java数据库连接池

    Java数据库连接池(JDBC Connection Pool)是一种管理数据库连接的技术,它允许应用程序重复使用已经存在的数据库连接,而不是每次需要时都创建新的连接。这大大提高了应用程序的性能和效率,因为创建和销毁数据库...

    完美的java jdbc连接池实例

    本实例提供了完美的Java JDBC连接池配置,适用于Oracle、MySQL和SQL Server等主流数据库,允许开发者轻松地在不同数据库之间切换方言。 首先,让我们了解什么是JDBC连接池。JDBC(Java Database Connectivity)是...

    Java使用MySQL实现连接池代码实例

    "Java使用MySQL实现连接池代码实例" Java语言提供了多种方式来实现数据库连接池,包括手动配置连接池和使用配置文件配置连接池两种方式。其中,手动配置连接池需要在代码中设置连接池的参数,如驱动类、JDBC URL、...

    轻量级java数据库连接池

    数据库连接池是数据库管理中的重要组成部分,它在Java应用程序中扮演着优化数据库资源分配与管理的角色。本项目提供了一个轻量级的Java数据库连接池实现,旨在简化开发过程,提高应用性能并降低资源消耗。下面将详细...

    mysql 连接池1.1版本易语言源码

    1.1 版本。对心跳机制做出了调整。对查询功能大范围修改。速度也提升了。...至于PHPJAVA类的数据库更加恐怖,有意的可去了解。给予调用源码,更多的功能可以自己于开源模块源码内开发。@彡Ksjsd风云。

    mysql连接池

    在Java开发中,常见的MySQL连接池实现有Apache的DBCP、C3P0、HikariCP以及Tomcat JDBC Connection Pool等。这些连接池库提供了配置参数,允许开发者调整连接的最大数量、最小数量、超时时间、空闲连接检查频率等,以...

    mysql-connector-java java连接mysql库

    例如,使用`try-with-resources`语句可以确保资源的正确关闭,而连接池(如C3P0、HikariCP或Apache DBCP)则可以提高应用程序的性能和可伸缩性,通过复用数据库连接来减少创建和销毁连接的开销。 总的来说,MySQL ...

    mysql,sqlserver,oracle,java连接池,连接程序

    本项目涵盖了对MySQL、SQL Server、Oracle这三种主流关系型数据库的Java连接池实现,旨在提供一个可以直接在Eclipse环境中运行的代码示例。 首先,我们来了解一下什么是连接池。数据库连接池是一种在应用程序启动时...

    java手写连接池

    Java手写连接池是一个编程实践,它涉及到数据库管理和优化,主要目标是提高数据库访问的效率和资源利用率。在Java中,连接池是一个管理数据库连接的系统,它预先创建一定数量的数据库连接,当应用程序需要时可以立即...

    Java数据库连接池的使用示例

    Java数据库连接池是Java应用程序管理数据库连接的一种高效方式。它避免了每次需要访问数据库时创建新的连接,而是预先创建一定数量的连接并保存在池中,当程序需要时可以从池中获取,用完后归还,从而提高了系统性能...

    mysql+tomcat连接池配置

    MySQL和Tomcat是Java Web开发中常用的数据库管理系统和应用服务器,它们之间的连接池配置是确保高效数据访问的关键。本文将详细介绍如何配置MySQL与Tomcat的连接池,以便在Java应用程序中实现优化的数据交互。 首先...

    Java 连接池多种方式配置

    Java连接池是优化数据库操作的关键技术之一,它通过复用已建立的数据库连接,避免了频繁创建和销毁连接带来的性能开销。本文将详细介绍在Java环境中配置连接池的多种方式,涵盖不同常用的Java框架。 一、C3P0连接池...

    java 数据库 连接池 jsp mysql oracle jdbc 配置

    java 数据库 连接池 jsp mysql oracle jdbc tomcat

    C3P0连接池jar包,mysql-connector-java-5.1.37,druid连接池jar包,commons-dbu

    本文将详细介绍三个重要的组件:C3P0连接池、MySQL的JDBC驱动(mysql-connector-java-5.1.37)以及Druid连接池,以及它们在Java中的应用和作用。 首先,C3P0是一个开源的JDBC连接池,全称为ComMchange V2 C3P0。它...

    java数据库连接池c3p0

    Java数据库连接池C3P0是一种常用的开源数据库连接管理工具,它通过提供连接池服务,提高了应用程序处理数据库连接的效率,降低了系统资源的消耗。在Java应用中,尤其是在服务器端,数据库连接的创建和关闭是相对耗时...

    java JDBC连接池

    Java JDBC连接池是一种高效管理数据库连接的技术,它允许应用程序重复使用已经建立的数据库连接,从而减少频繁创建和关闭连接带来的开销。在大型系统中,尤其是高并发环境下,使用连接池能够显著提升性能并降低资源...

    java手写数据库连接池

    数据库连接池是Java应用程序中非常重要的一个组件,它在提高应用性能、节省系统资源方面起着关键作用。本文将深入探讨如何使用Java手写数据库连接池,并基于maven进行项目构建。我们将分析四个核心类的功能,以及...

Global site tag (gtag.js) - Google Analytics