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