现在的位置: 首页 > 综合 > 正文

commons-dbcp数据库连接池技术

2018年05月28日 ⁄ 综合 ⁄ 共 1820字 ⁄ 字号 评论关闭

工作中,遇到了应用程序需要数据库连接池.这无疑是对程序性能的一个挑战.为什么使用数据库连接池呢?因为每次新建个连接,非常耗费资源.本人在自己的笔记本上做实验的结果如下: 
    每秒中,可以向MySQL中插入纪录4000条.而创建一个连接则需要200毫秒左右的时间.使用了连接池技术以后,创建连接几乎不用任何时间,用System.currentTimeMillis()打印时间差,为0毫秒.可见在大量并发访问的情况下,系统的性能通过连接池得到了飞跃. 
    因此搜索了好多开源框架,找到了DBCP.Tomcat的数据源技术,也是基于DBCP实现的.DBCP数据库连接池使用的方式很多,动态设置,配制文件(xml,properties).下面是示例代码.以及相关的驱动包我也给出来了.有兴趣的朋友们可以去试验一下.^-^ 
数据库连接字符串例子 
String url="jdbc:sqlserver://localhost:1433;database=数据库名;user=用户名;password=密码"; 
其中,connection有多个构造方法,可以根据自己的需要调整连接字符串是否有用户名和密码. 
commons项目地址:http://commons.apache.org/ 


commons-dbcp-1.4.jar 
 commons-pool-1.5.4.jar  mysql-connector-java-5.1.12-bin.jar 

Java代码  收藏代码
  1. import java.sql.SQLException;  
  2. import javax.sql.DataSource;  
  3. import org.apache.commons.dbcp.BasicDataSource;  
  4.   
  5. public class TestDBCP {  
  6.   
  7.     public static void main(String[] args) throws SQLException {  
  8.         BasicDataSource ds = new BasicDataSource();  
  9.         // 基本参数  
  10.         ds.setDriverClassName("com.mysql.jdbc.Driver");  
  11.         ds.setUsername("root");  
  12.         ds.setPassword("147258369");  
  13.         ds.setUrl("jdbc:mysql://192.168.0.34:3306/cold");  
  14.         // 池属性  
  15.         ds.setInitialSize(5);// 初始化连接池时,创建连接个数  
  16.         ds.setMinIdle(10);// 最小空闲连接数  
  17.         ds.setMaxIdle(100);// 最大空闲连接数  
  18.         ds.setMaxActive(100);// 连接池最大并发容量  
  19.   
  20.         // 可选测试参数,数据连接检测使用,网上常说的BUG,就是因为没设置下面属性引起的CONNECTION失效.  
  21.         ds.setValidationQuery("select count(*) from dual");  
  22.         ds.setTestOnBorrow(true);  
  23.         ds.setTestOnReturn(true);  
  24.         ds.setTestWhileIdle(true);  
  25.         // 大于0 ,进行连接空闲时间判断,或为0,对空闲的连接不进行验证  
  26.         ds.setMinEvictableIdleTimeMillis(1 * 60 * 1000);  
  27.         // 失效检查线程运行时间间隔,如果小于等于0,不会启动检查线程  
  28.         ds.setTimeBetweenEvictionRunsMillis(5 * 60 * 1000);  
  29.   
  30.         DataSource ds2 = (DataSource) ds;  
  31.         System.out.println(ds2.getConnection());  
  32.   
  33.     }  
  34.   
  35. }  

抱歉!评论已关闭.