赞
踩
闲来无事,就看了看连接池,在这里主要讲一下DBCP连接池中的properties配置文件和简单的实现(Oracle数据库)
准备工作:
主要三个jar包:
commons-dbcp2-2.6.0.jar、commons-pool2-2.4.2.jar、commons-logging-1.1.1.jar
之后是properties配置文件
1、Oracle连接的配置文件
driverName=oracle.jdbc.driver.OracleDriver url=jdbc:oracle:thin:@localhost:1521:orcl username=scott password=a //设置是否默认自动提交 默认为true defaultAutoCommit=true //是否为只读 默认为false defaultReadOnly=false //初始化数据池拥有的连接数量 initialSize=10 //池中最多可容纳的可以使用的连接数量 maxActive=20 //最大空闲等待 maxIdle=20 //最小空闲等待 minIdle=5 //最大等待时间 maxWait=20000
2、mysql连接的配置文件
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/restaurant
username=root
password=a
defaultAutoCommit=true
defaultReadOnly=false
initialSize=30
maxActive=10
maxIdle=10
minIdle=5
maxWait=100
removeAbandonedOnMaintenance=true
removeAbandonedOnBorrow=true
数据库的配置其实都是相同的。
接下来是具体的实现类
DbcpConnection.java
public class DbcpConnection { public static DataSource ds = null; private static PreparedStatement pstmt=null; private static ResultSet rs=null; static { // 初始化DS就可以提供连接,使用DBCP将初始化 Properties p = new Properties();// 使用这个工具类来读取文件的数据; try { p.load(DbcpConnection.class.getClassLoader().getResourceAsStream("dbcpconfig.properties")); ds = BasicDataSourceFactory.createDataSource(p); ((BasicDataSource) ds).setDefaultTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); } catch (Exception e) { // TODO Auto-generated catch block throw new ExceptionInInitializerError("初始化错误,请检查配置文件"); } } public static Connection getConn() { try { return ds.getConnection(); } catch (SQLException e) { // TODO Auto-generated catch block throw new RuntimeException("服务器忙"); } } //注意:这里的close关闭是DBCP已经代理过的close()方法并不是原生的close()方法。 public static void release(ResultSet rs, PreparedStatement pstmt, Connection conn) { if (null != rs) { try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (null != pstmt) { try { pstmt.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (null != conn) { try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
下面是测试类
public class DbcpTest { DbHelper db=new DbHelper(); Connection conn=null; @Test //100个 9051 public void DbcpTest01() throws Exception{ long a=System.currentTimeMillis(); //for循环测试效率 for(int i=1;i<1000;i++){ System.out.println(i); conn=DbcpConnection.getConn(); //close()方法 conn.close(); } long b=System.currentTimeMillis(); System.err.println(b-a); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。