由于数据库的连接是一个非常耗时的IO操作,所以连接池是为了解决这一问题而出现的。连接池是一种把数据库的连接缓存起来的机制。目的以最多的连接服务最多的请求。
目前主流的连接池有以下两种
apache的DBCP
hibernate的C3P0
apache的DBCP的设置方法:
第一种配置.tomcat 里配置资源,通过JDK的JNDI来访问资源连接池
tomcat 配置:在tomcat/conf/context.xml下面配置
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver"
maxActive="20" maxIdle="10" maxWait="-1" name="jdbc/fkbookapp"
password="root" type="javax.sql.DataSource" url="jdbc:mysql://127.0.0.1:3306/fkbook"
username="root" />
在java文件中引用:
package com.sharp.util;
import java.sql.Connection;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
/**
* @Version: 1
* @JDK: jdk 1.7
* @Module: TestJob
* 2012-6-25 - 上午10:46:37 Created by Sharp
*/
/*- History
**********************************************
* ID DATE PERSON REASON
* 1 2012-6-25 Sharp Created
**********************************************
*/
public class ConnectionFactory {
private static DataSource ds;
static{
try{
Context context = new InitialContext();
ds = (DataSource)context.lookup("java:comp/env/jdbc/fkbookapp");
}catch(Exception e){
e.printStackTrace();
}
}
public static Connection getMysqlConnection(){
try{
return ds.getConnection();
}catch(Exception e){
e.printStackTrace();
return null;
}
}
}
第二种配置
直接在java文件里配置
/** * @Version: 1 * @JDK: jdk 1.7 * @Module: mypool * 2012-6-25 - 下午9:42:36 Created by Sharp */ /*- History ********************************************** * ID DATE PERSON REASON * 1 2012-6-25 Sharp Created ********************************************** */ package com.sharp.connectionfactory; import java.sql.Connection; import org.apache.commons.dbcp.BasicDataSource; public class PoolTest { private static BasicDataSource ds; static{ ds = new BasicDataSource(); ds.setUrl("jdbc:mysql://127.0.0.1:3306/fkbook"); ds.setUsername("root"); ds.setPassword("xiaopeng"); ds.setDriverClassName("com.mysql.jdbc.Driver"); ds.setMaxActive(5); ds.setMaxIdle(3); ds.setMaxWait(5000); } public static void main(String[] args) { try{ Connection con1 = ds.getConnection(); System.out.println("con1----------->" + con1); Connection con2 = ds.getConnection(); System.out.println("con2----------->" + con2); Connection con3 = ds.getConnection(); System.out.println("con3----------->" + con3); Connection con4 = ds.getConnection(); System.out.println("con4----------->" + con4); con1.close(); con2.close(); con3.close(); con4.close(); System.out.println("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"); Connection con5 = ds.getConnection(); System.out.println("con5----------->" + con5); Connection con6 = ds.getConnection(); System.out.println("con6----------->" + con6); Connection con7 = ds.getConnection(); System.out.println("con7----------->" + con7); Connection con8 = ds.getConnection(); System.out.println("con8----------->" + con8); con5.close(); con6.close(); con7.close(); con8.close(); }catch(Exception e){ e.printStackTrace(); } } }