为什么要使用数据库连接池?
编写连接池原理分析:
连接连接池需要实现javax.sql.DataSourse接口
实现DataSourse接口,并实现连接功能的步骤:
在DataSourse构造函数中批量创建多个数据库的连接,并把创建的连接保存到一个集合对象中,实现getConnection()方法,让getConnection()方法每次调用时,从集合对象中取出一个connection返回给用户。
当用户使用完connection,调用connection.close()方式时,connection对象应保证将自己返回到连接池的集合对象中,而不要把connection关闭掉还给数据。
jndi连接池:
1.配置Servers下的context.xml
2.配置web.xml文件
3.添加驱动包
4.编写代码,使用lookup()方法获得数据源对象
|----context.xml
<Resource name="second" auth="Container" driverClassName="com.mysql.jdbc.Driver" maxActive="100" maxIdle="30" maxWait="10000" password="123456" type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/seconddb" username="root"/> |
|----web.xml容器
<resource-ref> <res-ref-name>second</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> |
|----BaseDao
package com.dt64.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import javax.naming.Context; import javax.naming.InitialContext; import javax.sql.DataSource; public class BaseDao{ protected Connection conn=null; protected PreparedStatement pst=null; protected ResultSet rs=null; protected DataSource ds=null; //连接方法 public Connection getconn(){ try { Context cx=new InitialContext(); ds=(DataSource)cx.lookup("java:/comp/env/second"); conn=ds.getConnection(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } return conn; } //关闭方法 public void close(Connection conn,PreparedStatement pst,ResultSet rs){ try { if(rs!=null){ rs.close(); } if(pst!=null){ pst.close(); } if(conn!=null){ conn.close(); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } } |
注意:
- acquireIncrement :如果连接池中没有连接了,那么一次性增长多少个 默认值是3
- initialPoolSize:连接池中初始化连接数量默认值是3
- maxPoolSize:连接池中最大的连接数 默认值15
- maxIdleTime:连接在连接池中多长没有被使用就释放掉 默认是0 表示连接永不过期。
- minPoolSize:连接池中最小连接数量默认 3