`
这些年
  • 浏览: 389747 次
  • 性别: 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完整包内置xml

    c3p0是款强大的数据库连接池 其完整包要到官网下载 第一次使用学习的同学一定很是头大!因为不知道怎么写xml环境配置文件 所以本人稍微做了整理 里面有样板的xml配置文件 注意:1 配置文件名不能乱改(否则c3p0会找不到...

    c3p0 重新自动连接c3p0 重新自动连接c3p0 重新自动连接c3p0 重新自动连接

    c3p0 重新自动连接c3p0 重新自动连接c3p0 重新自动连接c3p0 重新自动连接

    c3p0-0.9.5.2-API文档-中文版.zip

    赠送jar包:c3p0-0.9.5.2.jar; 赠送原API文档:c3p0-0.9.5.2-javadoc.jar; 赠送源代码:c3p0-0.9.5.2-sources.jar; 赠送Maven依赖信息文件:c3p0-0.9.5.2.pom; 包含翻译后的API文档:c3p0-0.9.5.2-javadoc-API...

    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

    C3P0使用,C3P0源码及实例

    C3P0源码及实例:C3P0资源文件配置、XML文件配置 C3P0源码及实例:C3P0资源文件配置、XML文件配置

    c3p0jar包

    c3p0连接池,java jdbc操作

    C3P0数据库连接池

    C3P0数据库连接池和jar包,因为jdbc没有保持连接的能力,一旦超过一定时间没有使用(大约几百毫秒),连接就会被自动释放掉。而每次新建连接都需要140毫秒左右的时间,所以耗费时间比较多。若使用C3P0连接池来池化...

    java中c3p0数据库连接池使用方法(c3p0-config.xml+c3p0-0.9.2-pre1.jar+JdbcPool_c3p0.java)

    java中c3p0数据库连接池使用方法(c3p0-config.xml+c3p0-0.9.2-pre1.jar+JdbcPool_c3p0.java),里面包含了c3p0-0.9.2-pre1.jar、以及配置文件:c3p0-config.xml、以及一个c3p0数据库连接池工具类(只有简单的两个方法...

    c3p0-config.xml

    c3p0配置文件

    c3p0 jar包

    c3p0 jar包c3p0 jar包c3p0 jar包c3p0 jar包c3p0 jar包c3p0 jar包c3p0 jar包c3p0 jar包c3p0 jar包c3p0 jar包c3p0 jar包

    c3p0配置文件

    c3p0配置文件

    c3p0的JAR包

    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。C3P0数据源在项目开发中使用得比较多。导入相关jar包c3p0-0.9.2-pre1.jar、...

    c3p0-0.9.5.1

    c3p0-0.9.5.1 jar包

    C3P0相关的JAR包

    C3P0相关的JAR包,数据库连接池所依赖的三个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

    c3p0连接池jar包

    c3p0连接池jar包

    c3p0和dbutils的jar包

    c3p0和dbutils的jar包c3p0和dbutils的jar包c3p0和dbutils的jar包c3p0和dbutils的jar包c3p0和dbutils的jar包c3p0和dbutils的jar包c3p0和dbutils的jar包c3p0和dbutils的jar包c3p0和dbutils的jar包c3p0和dbutils的jar包...

    c3p0-0.9.2.1 jar包.rar

    C3P0 是最常用的连接池技术!Spring框架,默认支持C3P0连接池技术!

    C3P0连接池配置详解C3P0连接池配置详解

    C3P0连接池配置详解C3P0连接池配置详解C3P0连接池配置详解C3P0连接池配置详解

Global site tag (gtag.js) - Google Analytics