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

commons-dbcp数据库连接池技术

阅读更多
    工作中,遇到了应用程序需要数据库连接池.这无疑是对程序性能的一个挑战.为什么使用数据库连接池呢?因为每次新建个连接,非常耗费资源.本人在自己的笔记本上做实验的结果如下:
    每秒中,可以向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/

import java.sql.SQLException;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;

public class TestDBCP {

	public static void main(String[] args) throws SQLException {
		BasicDataSource ds = new BasicDataSource();
		// 基本参数
		ds.setDriverClassName("com.mysql.jdbc.Driver");
		ds.setUsername("root");
		ds.setPassword("147258369");
		ds.setUrl("jdbc:mysql://192.168.0.34:3306/cold");
		// 池属性
		ds.setInitialSize(5);// 初始化连接池时,创建连接个数
		ds.setMinIdle(10);// 最小空闲连接数
		ds.setMaxIdle(100);// 最大空闲连接数
		ds.setMaxActive(100);// 连接池最大并发容量

		// 可选测试参数,数据连接检测使用,网上常说的BUG,就是因为没设置下面属性引起的CONNECTION失效.
		ds.setValidationQuery("select 1");
		ds.setTestOnBorrow(true);
		ds.setTestOnReturn(true);
		ds.setTestWhileIdle(true);
		// 大于0 ,进行连接空闲时间判断,或为0,对空闲的连接不进行验证
		ds.setMinEvictableIdleTimeMillis(1 * 60 * 1000);
		// 失效检查线程运行时间间隔,如果小于等于0,不会启动检查线程
		ds.setTimeBetweenEvictionRunsMillis(5 * 60 * 1000);

		DataSource ds2 = (DataSource) ds;
		System.out.println(ds2.getConnection());

	}

}


注意:
timeBetweenEvictionRunsMillis 和 minEvictableIdleTimeMillis,他们两个配合,可以持续更新连接池中的连接对象,当 timeBetweenEvictionRunsMillis 大于0时,每过timeBetweenEvictionRunsMillis 时间,就会启动一个线程,校验连接池中闲置时间超过minEvictableIdleTimeMillis的连接对象。


参考
commons-dbcp源码研究
http://macrochen.iteye.com/blog/320077
3
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics