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

c3p0(转)

    博客分类:
  • java
 
阅读更多
Xml代码  收藏代码
  1. driverClass=com.mysql.jdbc.Driver     
  2. jdbcjdbcUrl = jdbc:mysql://localhost:3306/test     
  3. user = root     
  4. password = root123  
  5. #当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->  
  6. c3p0.acquireIncrement=3  
  7. #初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3  
  8. c3p0.initialPoolSize=3  
  9. #连接池中保留的最小连接数  
  10. c3p0.minPoolSize=10  
  11. #连接池中保留的最大连接数。Default: 15  
  12. c3p0.maxPoolSize=15  
  13. #最大空闲时间,30秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->   
  14. c3p0.maxIdleTime=30  
  15. #每30秒检查所有连接池中的空闲连接。Default: 0   
  16. c3p0.idleConnectionTestPeriod=30  
  17. #当连接池用完时客户端调用getConnection()后等待获取新连接的时间,  
  18. #超时后将抛出SQLException,如设为0则无限期等待。单位毫秒。Default: 0   
  19. c3p0.checkoutTimeout=0  
  20. #每次连接验证连接是否可用  
  21. c3p0.validate=true  
  22. #当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->  
  23. acquireIncrement = 3  
  24. #定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->  
  25. acquireRetryAttempts = 30  
  26. #两次连接中间隔时间,单位毫秒。Default: 1000 -->  
  27. acquireRetryDelay = 1000  
  28. #如果设为true那么在取得连接的同时将校验连接的有效性。Default: false  
  29. testConnectionOnCheckin = true  
  30. #c3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那么  
  31. #属性preferredTestQuery将被忽略。你不能在这张Test表上进行任何操作,  
  32. #它将只供c3p0测试 使用。Default: null-->  
  33. automaticTestTable = c3p0TestTable  

 

 

JAVA代码1:读取资源文件

Java代码  收藏代码
  1. package com.lpc.c3po;  
  2.   
  3. import java.util.ResourceBundle;  
  4. /** 
  5.  * 读取配置文件 
  6.  * @author Administrator 
  7.  * 
  8.  */  
  9. public class C3P0SystemConfig {  
  10.       
  11.     static String configFile = "kkx/jdbc";//根据具体配置文件名称配置  
  12.       
  13.     public static String getConfigInfomation(String itemIndex) {  
  14.            try {  
  15.                ResourceBundle resource = ResourceBundle.getBundle(configFile);  
  16.                return resource.getString(itemIndex);  
  17.            } catch (Exception e) {  
  18.                return"";  
  19.            }  
  20.         }  
  21. }  

 

 

JAVA代码2:数据库连接

Java代码  收藏代码
  1. package com.lpc.c3po;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.SQLException;  
  5.   
  6. import com.mchange.v2.c3p0.ComboPooledDataSource;  
  7. /** 
  8.  * C3PO 获得连接 
  9.  * @author Administrator 
  10.  * 
  11.  */  
  12. public class C3P0DBConnectionManager {  
  13.     private static ComboPooledDataSource cpds = null;  
  14.   
  15.     /** 
  16.      * 初始化 
  17.      */  
  18.     public static void init() {  
  19.         // 建立数据库连接池  
  20.         String DRIVER_NAME = C3P0SystemConfig  
  21.                 .getConfigInfomation("jdbc.driverClassName"); // 驱动器  
  22.         String DATABASE_URL = C3P0SystemConfig.getConfigInfomation("jdbc.url"); // 数据库连接url  
  23.         String DATABASE_USER = C3P0SystemConfig  
  24.                 .getConfigInfomation("jdbc.username"); // 数据库用户名  
  25.         String DATABASE_PASSWORD = C3P0SystemConfig  
  26.                 .getConfigInfomation("jdbc.password"); // 数据库密码  
  27.         int Min_PoolSize = 5;  
  28.         int Max_PoolSize = 50;  
  29.         int Acquire_Increment = 5;  
  30.         int Initial_PoolSize = 10;  
  31.         // 每隔3000s测试连接是否可以正常使用  
  32.         int Idle_Test_Period = 3000;  
  33.         // 每次连接验证连接是否可用  
  34.         String Validate = C3P0SystemConfig.getConfigInfomation("c3p0.validate");  
  35.         if (Validate.equals("")) {  
  36.             Validate = "false";  
  37.         }  
  38.         // 最小连接数  
  39.         try {  
  40.             Min_PoolSize = Integer.parseInt(C3P0SystemConfig.getConfigInfomation("c3p0.minPoolSize"));  
  41.         } catch (Exception ex) {  
  42.             ex.printStackTrace();  
  43.         }  
  44.         // 增量条数  
  45.         try {  
  46.             Acquire_Increment = Integer.parseInt(C3P0SystemConfig  
  47.                     .getConfigInfomation("c3p0.acquireIncrement"));  
  48.         } catch (Exception ex) {  
  49.             ex.printStackTrace();  
  50.         }  
  51.         // 最大连接数  
  52.         try {  
  53.             Max_PoolSize = Integer.parseInt(C3P0SystemConfig  
  54.                     .getConfigInfomation("c3p0.maxPoolSize"));  
  55.         } catch (Exception ex) {  
  56.             ex.printStackTrace();  
  57.         }  
  58.         // 初始化连接数  
  59.         try {  
  60.             Initial_PoolSize = Integer.parseInt(C3P0SystemConfig  
  61.                     .getConfigInfomation("c3p0.initialPoolSize"));  
  62.         } catch (Exception ex) {  
  63.             ex.printStackTrace();  
  64.         }  
  65.         // 每隔Idle_Test_Period s测试连接是否可以正常使用  
  66.         try {  
  67.             Idle_Test_Period = Integer.parseInt(C3P0SystemConfig  
  68.                     .getConfigInfomation("c3p0.idleConnectionTestPeriod"));  
  69.         } catch (Exception ex) {  
  70.             ex.printStackTrace();  
  71.         }  
  72.   
  73.         try {  
  74.             cpds = new ComboPooledDataSource();  
  75.             cpds.setDriverClass(DRIVER_NAME); // 驱动器  
  76.             cpds.setJdbcUrl(DATABASE_URL); // 数据库url  
  77.             cpds.setUser(DATABASE_USER); // 用户名  
  78.             cpds.setPassword(DATABASE_PASSWORD); // 密码  
  79.             cpds.setInitialPoolSize(Initial_PoolSize); // 初始化连接池大小  
  80.             cpds.setMinPoolSize(Min_PoolSize); // 最少连接数  
  81.             cpds.setMaxPoolSize(Max_PoolSize); // 最大连接数  
  82.             cpds.setAcquireIncrement(Acquire_Increment); // 连接数的增量  
  83.             cpds.setIdleConnectionTestPeriod(Idle_Test_Period); // 测连接有效的时间间隔  
  84.             cpds.setTestConnectionOnCheckout(Boolean.getBoolean(Validate)); // 每次连接验证连接是否可用  
  85.         } catch (Exception ex) {  
  86.             ex.printStackTrace();  
  87.         }  
  88.     }  
  89.   
  90.     /** 
  91.      * 取得链接 
  92.      *  
  93.      * @return 
  94.      */  
  95.     public static Connection getConnection() {  
  96.         Connection connection = null;  
  97.         try {// 保证只进行一次初始化  
  98.             if (cpds == null) {  
  99.                 init();  
  100.             }  
  101.             // 取得connection  
  102.             connection = cpds.getConnection();  
  103.         } catch (SQLException ex) {  
  104.             ex.printStackTrace();  
  105.         }  
  106.         return connection;  
  107.     }  
  108.   
  109.     /** 
  110.      * 释放连接 
  111.      */  
  112.     public static void release() {  
  113.         try {  
  114.             if (cpds != null) {  
  115.                 cpds.close();  
  116.             }  
  117.         } catch (Exception ex) {  
  118.             ex.printStackTrace();  
  119.         }  
  120.     }  
  121.   
  122. }  

 

 

注:

解决MYSQL 8小时问题 
最近的一个项目在Hibernate使用C3P0的连接池,数据库为Mysql。开发测试没有问题,在运行中每个一段长的空闲时间就出现异常:

Java代码  收藏代码
  1. ** BEGIN NESTED EXCEPTION **   
  2. com.mysql.jdbc.CommunicationsException   
  3. MESSAGE: Communications link failure due to underlying exception:   
  4. ** BEGIN NESTED EXCEPTION **   
  5. java.net.SocketException   
  6. MESSAGE: Broken pipe   
  7. STACKTRACE:   
  8. java.net.SocketException: Broken pipe   
  9. at java.net.SocketOutputStream.socketWrite0(Native Method)   
  10. ......   
  11. ** END NESTED EXCEPTION **   

 

 

解决方法:

 

Xml代码  收藏代码
  1. C3P0增加以下配置信息:   
  2. //获取connnection时测试是否有效   
  3. testConnectionOnCheckin = true   
  4. //自动测试的table名称   
  5. automaticTestTable=C3P0TestTable   
  6. idleConnectionTestPeriod = 18000   
  7. maxIdleTime = 25000   
  8. testConnectionOnCheckout = true   

 

分享到:
评论

相关推荐

    c3p0所依赖的jar包

    C3P0是一个开源的Java连接池,全称为Comming Soon Connection Pool,它提供了一种管理数据库连接的方式,使得在多用户并发访问时能够有效地利用和管理数据库资源,提高系统的性能和稳定性。C3P0的主要功能是为应用...

    C3P0相关的JAR包

    - `c3p0.jar`:包含了C3P0的核心连接池功能。 - `mchange-commons-java.jar`:Mchange Commons Java库,提供了一些通用工具类和异常处理。 - `mysql-connector-java.jar`(或其他数据库驱动JAR):根据你的数据库...

    c3p0-0.9.5.1

    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。标题中的"c3p0-0.9.5.1"指的是C3P0的一个特定版本,即0.9.5.1版。这个版本可能包含了对早期版本的修复、性能优化或新功能...

    C3P0连接池配置需要的jar包

    C3P0库依赖于其他几个JAR包来实现其功能,包括`c3p0-0.9.2.1.jar`、`hibernate-c3p0-4.0.0.Final[1].jar`以及`mchange-commons-java-0.2.3.4.jar`。 1. **c3p0-0.9.2.1.jar**: 这是C3P0的主要库文件,包含了C3P0的...

    c3p0连接池jar包

    C3P0连接池是Java开发中常用的数据库连接池组件,它由M-Fenyes创建并维护,旨在提供一个高效、灵活且稳定的数据库连接管理工具。数据库连接池在多线程应用中扮演着重要角色,它能有效地管理和复用数据库连接,避免...

    c3p0的jar包

    C3P0是一个广泛使用的开源Java JDBC连接池,它的全称是Comprehensive Connection Pooling Package。这个库的主要目的是提供数据库连接的高效管理,以优化数据库应用程序的性能和资源利用。C3P0的设计目标是为了满足...

    c3p0用法步骤

    标题:"c3p0用法步骤" 描述:"这是我学习过程中积累的学习笔记,希望对大家有用" 标签:"c3p0" 知识点详述: C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC连接池的特性,如:自动重连、自动...

    C3p0c3p0-0.9.5.5三个包

    C3p0c3p0-0.9.5.5三个jar包使用,匹配mysql8.0等信息,包含mchange-commons-java-0.2.19.jar、c3p0-oracle-thin-extras-0.9.5.5.jar、c3p0-0.9.5.5.jar

    springMVC整合C3P0连接池

    整合SpringMVC与C3P0能有效地优化数据库操作,提高应用的性能和稳定性。 首先,我们需要了解C3P0的基本概念。C3P0是一个完全兼容JDBC3规范的连接池实现,提供了连接测试、空闲连接检测、自动关闭无效连接等功能。其...

    C3P0使用所需要的jar包

    C3P0是一款开源的Java数据库连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在Java应用程序中,C3P0可以帮助我们更有效地管理和使用数据库连接,避免频繁创建和关闭连接导致的性能损失。下面将...

    C3P0的jar包

    C3P0是一个开源的Java连接池,全称为Comming Soon Connection Pool,它提供了一种在JDBC数据库连接管理中的高效、稳定和扩展性良好的解决方案。C3P0的主要目标是通过提供自动的资源管理和故障恢复功能,来帮助Java...

    c3p0所需jar包

    C3P0是一款开源的Java连接池,全称为ComMChange V2 C3P0,由M. J. Franklin创建并维护。它提供了一种高效、灵活且强大的数据库连接管理方式,广泛应用于Java应用程序中,特别是对于那些需要大量并发数据库访问的Web...

    C3P0使用,C3P0源码及实例

    **C3P0详解** C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在Java的Web应用中,数据库连接的创建、分配、管理和释放是相当耗时的,而C3P0通过管理这些连接,提高了...

    c3p0-0.9.2.1 jar包.rar

    C3P0是一款开源的Java连接池,全称为Comming Soon Connection Pool,它是一个支持JDBC的数据库连接池组件。这个组件的主要作用是提高数据库访问的效率,通过复用已经建立的数据库连接,减少频繁创建和关闭连接所造成...

    C3P0用到的jar包和配置文件.zip

    C3P0是一个开源的Java连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。这个压缩包文件包含了使用C3P0数据库连接池所需的关键组件和配置文件,使得数据库连接管理更加高效和稳定。 首先,`c3p0-...

    c3p0-0.9.2-pre1

    **c3p0-0.9.2-pre1:数据库连接池详解** c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0-0.9.2-pre1是其在2007年发布的一个版本,尽管现在有更新的版本,但这个老...

    C3P0和DButils

    C3P0和DBUtils是两个非常重要的库,用于简化Java应用程序中的数据库操作。以下是这两个库的详细介绍: C3P0是一个开源的JDBC连接池,它的全称是Commerical-grade Connection Pooling for JDBC。C3P0-0.9.1.2.jar是...

    c3p0需要的所有的jar包(完整)

    在描述中提到的三个jar包,c3p0-0.9.1.jar、c3p0-0.9.1.2.jar和c3p0-0.9.1-pre6.jar,都是C3P0的不同版本。通常,你需要的是最新版本,以获取最新的功能和修复的bug。例如,c3p0-0.9.1.2.jar比c3p0-0.9.1.jar更新,...

Global site tag (gtag.js) - Google Analytics