由于数据库的连接是一个非常耗时的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();
}
}
}