08120170920
08120170920
1、为什么需要连接池?因为打开和关闭Connection需要耗费时间和内存开销
2、连接池常见种类:
1)、dbcp(tomcat容器内部支持,tomcat-dbcp.jar已经存在,不需要手工导入)
2)、druid(阿里)[需要导入druid-1.1.3.jar包]
3)、cp30(开源)
3、配置连接池的主要参数:[具体见context.xml文件]
1)、最小连接数[数据库一直保持的Connection对象数目]
2)、初始化连接数[创建连接池时,预先初始化的Connection对象数目]
3)、最大连接数[连接池能容纳的最大Connection对象数目,超过则放在等待队列中,连接池的并发量]
4)、最大等待时间[当内有可用连接,连接等待的最大时间]
5)、最大空闲连接数[连接池内空闲的最大Connection对象数目](针对dbcp数据源)
WEB-INF/web.xml
${catalina.base}/conf/web.xml
package com.tiger.datasource;
import java.sql.*;
import javax.naming.*;
import javax.sql.DataSource;
/**
* tomcat自带支持dbcp数据连接池
* @author tiger
* @time 2017年9月20日
*/
public class Mydbcp {
private static DataSource ds = null;
/**
* 注册
*/
static {
try {
Context initContext=new InitialContext();
/**
* lookup表示寻找容器的资源
* java:comp/env/--》表示在当前的Web环境的上下文(Context对象)
* jdbc/databsesName--》根据JNDI命名
*/
ds = (DataSource) initContext.lookup("java:comp/env/jdbc/t_order");
} catch (NamingException e) {
e.printStackTrace();
}
}
/**
* 获取连接池对象
* @return
*/
public Connection getConnection() {
Connection conn=null;
try {
conn=ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}finally {
if(conn!=null)
{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return conn;
}
}package com.tiger.datasource;
import java.sql.*;
import javax.naming.*;
import com.alibaba.druid.pool.DruidDataSource;
/**
* durid数据连接池
* @author tiger
* @time 2017年9月20日
*/
public class Mydurid {
private static DruidDataSource ds = null;
/**
* 注册
*/
static {
try {
Context initContext=new InitialContext();
/**
* lookup表示寻找容器的资源
* java:comp/env/--》表示在当前的Web环境的上下文(Context对象)
* jdbc/databsesName--》根据JNDI命名
*/
ds = (DruidDataSource) initContext.lookup("java:comp/env/jdbc/MysqlDataSource");
} catch (NamingException e) {
e.printStackTrace();
}
}
/**
* 获取连接池对象
* @return
*/
public Connection getConnection() {
Connection conn=null;
try {
conn=ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}finally {
if(conn!=null)
{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return conn;
}
/**
* 判断是否连接成功
* @return
*/
public boolean isConnection() {
boolean ok=false;
Connection conn=null;
try {
conn=ds.getConnection();
ok=!conn.isClosed();
} catch (SQLException e) {
e.printStackTrace();
}finally {
if(conn!=null)
{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return ok;
}
}