C3P0数据库连接池【JAVA】-oracle数据库为例

来源:互联网 发布:易语言access sql查询 编辑:程序博客网 时间:2024/05/17 06:03

转自:http://blog.csdn.net/willability/article/details/8467515

 

java项目中数据库的连接池选用了C3P0,个人感觉还是挺好用的,目前没有发现什么问题,主要是配置上的结合,今天总结一下如何使用及通用配置解析。

1.第三方jar 我使用的是 c3p0-0.9.2-pre4.jar

2. 刚开始使用这个的时候,由于项目比较紧张,我采用的是set方式来进行配置,其实后来一了解,繁琐了很多,当初的方式如下:

[java] view plaincopyprint?
  1. //数据库连接池 使用C3P0数据库连接池  
  2. private static ComboPooledDataSource _ds = new ComboPooledDataSource();  
  3.       
  4. /**  
  5.  * 数据库连接池初始化  
  6. */    
  7. static {    
  8.     try {         
  9.         DbEntity db = ConfigCenter.GetDbEntity();   //DbEntity存储数据库连接中的各种信息  
  10.         _ds.setJdbcUrl(db.get_url());    
  11.         _ds.setUser(db.get_username());    
  12.         _ds.setPassword(db.get_password());   
  13.         _ds.setMaxStatements(0);     
  14.         //TODO 连接池各种优化配置 按需添加  
  15.         _ds.setDriverClass(db.get_driver());  
  16.         } catch (PropertyVetoException e) {  
  17.             ...  
  18.         }            
  19. }   
  20.       
  21. /** 
  22. * 获取数据库连接 
  23. * @return 
  24. */  
  25. private static Connection getConnection() {    
  26.     Connection conn = null;    
  27.     try {    
  28.         conn = _ds.getConnection();    
  29.     } catch (Exception e) {    
  30.         ...  
  31.     }    
  32.     return conn;    
  33. }    
3. 上面这种配置连接池的方法是最繁琐的,之后我使用了配置文件配置,将配置文件c3p0-config.xml放在类加载路径下或自己定义的目录下,我个人喜欢将配置文件放入我指定的目录下,故我使用此种方式进行指定:

[java] view plaincopyprint?
  1. //加载c3p0连接池配置  
  2. System.setProperty("com.mchange.v2.c3p0.cfg.xml","configs/c3p0-config.xml");  
4. 我之所以没有采用property文件,是因为我要用到多个数据库源,我的配置如下:

[html] view plaincopyprint?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <c3p0-config>  
  3.     <named-config name="data1">  
  4.         <property name="user">root</property>  
  5.         <property name="password">root</property>  
  6.         <property name="driverClass">oracle.jdbc.driver.OracleDriver</property>  
  7.         <property name="jdbcUrl">jdbc:oracle:oci8:@dataname</property>  
  8.         <!-- 连接池初始化时建立的连接数 默认值是3 -->  
  9.         <property name="initialPoolSize">3</property>  
  10.         <!-- 连接的最大空闲时间  单位秒 默认是0-代表永远不会断开连接  超过设定时间的空闲连接将会断开 -->  
  11.         <property name="maxIdleTime">30</property>  
  12.         <!-- 连接池中拥有的最大连接数 默认值为15个 -->  
  13.         <property name="maxPoolSize">20</property>  
  14.         <!-- 连接池中保持的最小连接数  默认值为3个-->  
  15.         <property name="minPoolSize">3</property>  
  16.         <!-- 将连接池的连接数保持在minpoolsize 必须小于maxIdleTime设置  默认值为0代表不处理  单位秒 -->  
  17.         <property name="maxIdleTimeExcessConnections">15</property>  
  18.     </named-config>     
  19. </c3p0-config>  
XML配置文件可以为多个数据源服务,提供default-config和named-config两种配置方式,如果你只用一个数据源,大可使用default-config配置,与named-config的却别是初始化的时候无参 or有参,default-config配置如下

[html] view plaincopyprint?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <c3p0-config>  
  3.     <default-config>  
  4.         <property name="user">root</property>  
  5.         <property name="password">root</property>  
  6.         <property name="driverClass">oracle.jdbc.driver.OracleDriver</property>  
  7.         <property name="jdbcUrl">jdbc:oracle:oci8:@dataname</property>  
  8.         <!-- 连接池初始化时建立的连接数 默认值是3 -->  
  9.         <property name="initialPoolSize">3</property>  
  10.         <!-- 连接的最大空闲时间  单位秒 默认是0-代表永远不会断开连接  超过设定时间的空闲连接将会断开 -->  
  11.         <property name="maxIdleTime">30</property>  
  12.         <!-- 连接池中拥有的最大连接数 默认值为15个 -->  
  13.         <property name="maxPoolSize">20</property>  
  14.         <!-- 连接池中保持的最小连接数  默认值为3个-->  
  15.         <property name="minPoolSize">3</property>  
  16.         <!-- 将连接池的连接数保持在minpoolsize 必须小于maxIdleTime设置  默认值为0代表不处理  单位秒 -->  
  17.         <property name="maxIdleTimeExcessConnections">15</property>   
  18.     </default-config>  
  19. </c3p0-config>  

5.前序工作都做完了,现在该看看我们如何初始化了

[java] view plaincopyprint?
  1. //数据库连接池 使用C3P0数据库连接池 使用named-config模式 则通过有参构造函数初始化  带上name  
  2. private static ComboPooledDataSource _ds = new ComboPooledDataSource("data1");  
  3. //采用default-config模式  则使用无参构造函数即可  
  4. //private static ComboPooledDataSource _ds = new ComboPooledDataSource();  
  5.       
  6. /** 
  7.  * 获取数据库连接 
  8.  * @return 
  9.  */  
  10. private static Connection getConnection() {    
  11.     Connection conn = null;    
  12.     try {    
  13.         conn = _ds.getConnection();    
  14.     } catch (Exception e) {    
  15.         ...  
  16.     }    
  17.     return conn;    
  18. }  

   通过简单的配置即可实现多数据源的数据库连接池,在一个C3P0-config.xml配置文件中可以既有default-config 又有named-config,只是初始化的时候指明即可(无参 or 有参)

   突然想到,既然总结了oracle数据库连接池的初始化,下一次把对各种语句or存储过程or函数的执行调度也总结下吧,敬请期待...

原创粉丝点击