DBCP(DataBase connection pool)数据库连接池。这个技术是为了加快数据库的响应而创造的,数据库的连接时一个很费时耗资源的行为。最近,开发都是电商的web网站,大数据量的数据库,反应确实有点慢。连接池这个技术很早就接触过,但是没有一个深入的研究。说白了,连接池就是在内存中划块地方,专门用来存放预先创建好的数据库连接。这样接可以节省每次开启数据连接那一套流程的消耗。
DBCP单独使用的时候,必须要导入三个jar包:
commons-dbcp.jar
commons-pool.jar
commons-collections.jar(dbcp1.2时,必须)
DBCP的实现类:
1 import java.sql.Connection; 2 import java.sql.SQLException; 3 import java.util.Properties; 4 5 import org.apache.commons.dbcp.BasicDataSource; 6 import org.apache.commons.dbcp.BasicDataSourceFactory; 7 8 9 public class ConnectionSource { 10 private static BasicDataSource dataSource = null; 11 12 public static void init(){ 13 //判断数据库连接是否已经分配,如果已分配,则关闭 14 if(dataSource != null){ 15 try { 16 dataSource.close(); 17 } catch (SQLException e) { 18 // TODO Auto-generated catch block 19 e.printStackTrace(); 20 } 21 dataSource = null; 22 } 23 24 try { 25 //配置,使用Properties,只接受这一种方式 26 Properties p = new Properties(); 27 p.setProperty("driverClassName","com.mysql.jdbc.Driver"); 28 p.setProperty("url", "jdbc:mysql://localhost:3306/sampledb"); 29 p.setProperty("username", "root"); 30 p.setProperty("password", "yflllb"); 31 32 dataSource= (BasicDataSource) BasicDataSourceFactory.createDataSource(p); 33 } catch (Exception e) { 34 // TODO: handle exception 35 } 36 } 37 38 public static synchronized Connection getConnection() throws SQLException { 39 if(dataSource == null){ 40 init(); 41 } 42 Connection connection = null; 43 if(dataSource != null){ 44 connection = dataSource.getConnection(); 45 } 46 47 return connection; 48 } 49 }
调用这个类的getConnection()方法,得到连接。
写java的web项目,常用到spring框架。spring3.0之后版本,按模块集成。其中就集成了DBCP,可以使用spring的配置文件来配置DBCP:
1 <!-- 定义一个DBCP实现的数据源 --> 2 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 3 destroy-method="close" 4 p:driverClassName="com.mysql.jdbc.Driver" 5 p:url="jdbc:mysql://localhost:3306/sampledb" 6 p:username="root" 7 p:password="yflllb" 8 />