连接池原理
数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。
现在流行的第三方Java数据库连接池库
DBCP
它是Apache推出的Database Connection Pool,属于Apache Commons开源项目,官网:http://commons.apache.org/components.html。Commons的目的是提供可重用的、开源的Java代码。
使用步骤:
> 1 添加jar包commons-dbcp-1.4.jar commons-pool-1.5.6.jar
>2 添加属性资源文件,命名:dbcp.properties,文件放在src目录下
#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/database
username=password=#initialSize=10#最大连接数量
maxActive=50#maxIdle=20#minIdle=5#maxWait=60000#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]
#注意:"user" 与 "password"两个属性会被明确地传递,因此这里不需要包含他们。
connectionProperties=useUnicode=true;characterEncoding=utf8
#指定由连接池所创建的连接的自动提交(auto-commit)状态。
defaultAutoCommit=true#driverdefault 指定由连接池所创建的连接的只读(read-only)状态。
#如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
defaultReadOnly=#driverdefault指定由连接池所创建的连接的事务级别(TransactionIsolation)。
#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=REPEATABLE_READ
> 3 编写数据源工具类
public classDBCPUtil {//得到数据源
private staticDataSource dataSource;static{try{
Properties pro= newProperties();
pro.load(DBCPUtil.class.getClassLoader().getResourceAsStream("dbcp.properties"));//得到连接池对象,同时获取配置文件中的信息给连接池对象使用
dataSource =BasicDataSourceFactory.createDataSource(pro);
}catch(Exception e) {throw new ExceptionInInitializerError("连接池初始化失败");
}
}//获取Connection对象的方法
public static Connection getConnection() throwsSQLException
{returndataSource.getConnection();
}//释放资源,这里的conn.close()是将连接对象放回连接池中,并不是销毁
public static voidrelease(Connection conn){if(conn!=null){try{
conn.close();
}catch(SQLException e) {
e.printStackTrace();
}
}}
}
C3P0
它是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。
c3p0与dbcp区别:dbcp没有自动回收空闲连接的功能,c3p0有自动回收空闲连接功能。
使用步骤:
1、添加jar包 c3p0-0.9.1.2.jar,下载位置:http://www.oschina.net/p/c3p0,开源中国中有详细的下载地址。
2、编写配置文件c3p0-config.xml,文件名固定,不能更改,【C3P0百度百科】有详细配置信息,比较全。
com.mysql.jdbc.Driver
jdbc:mysql://127.0.0.1:3306/test
60
60
1000
0
30
2
0
200
10
1
0
3、编写工具类
public classC3P0Util {private static ComboPooledDataSource cpds = newComboPooledDataSource();private static int i=1;public staticComboPooledDataSource getCpds() {returncpds;
}public staticConnection getConnection(){
Connection conn=null;try{
conn=cpds.getConnection();}catch(SQLException e) {
e.printStackTrace();
}returnconn;
}public static voidclose(Connection ct){if(ct!=null){try{ct.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
}
Tomcat内置连接池
开发JavaWeb应用,必须使用一个JavaWeb服务器,JavaWeb服务器都内置数据源。
数据源只需要配置服务器即可。
配置数据源的步骤:
1、拷贝【数据库连接的jar】到tomcat的lib目录下
2、配置数据源XML文件
a)如果把配置信息写在tomcat下的conf目录的context.xml中,那么所有应用都能使用此数据源。
b)如果是在当前应用的META-INF中创建context.xml,编写数据源,那么只有当前应用可以使用。
3、使用连接池
Context initContext = newInitialContext();
DataSource ds= (DataSource)initContext.lookup("java:comp/env/jdbc/test");
Connection conn= ds.getConnection();
JNDI:java nameing directory interface
JNDI容器就是一个Map
key(String)
value(Object)
path+name
对象
path+"jdbc/day16"
DataSource对象