c3p0(转)

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   

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值