连接池与使用Tomcat的连接池 _ Jacken_zone
Posted on连接池与使用Tomcat的连接池 _ Jacken_zone
连接池与使用Tomcat的连接池
Filed under: AppServ, IT Technology, JDBC |
Posted on 12月 13th, 2007 由 Jacken What is Connection Pool?看图~~
1)存放Connection对象的容器; 2)减少连接数据库的开销; 3)程序请求连接时,在Connection Pool中取连接; 4)连接使用完后,放回Connection Pool,不释放; 5)Connection Pool对连接进行管理:计数、监控连接状态;
自己写个连接池? ?一般情况下不要使用自己写的连接池,很多应用提供连接池,它们的更好更安全更专业…
DbConfig.java 下载: DbConfig.java
package cn.com.jacken.JPool.javabeans; public class DbConfig { private String jdbcDriver; private String url; private String userName; private String password; public String getJdbcDriver() { return jdbcDriver; } public void setJdbcDriver(String jdbcDriver) { this.jdbcDriver = jdbcDriver; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
IJConnectionPool.java 下载: IJConnectionPool.java
package cn.com.jacken.JPool;
import java.sql.Connection;
import java.util.Hashtable;
import cn.com.jacken.JPool.javabeans.DbConfig;
public abstract class IJConnectionPool{
protected Hashtable
JConnectionPoolImpl.java 下载: JConnectionPoolImpl.java
package cn.com.jacken.JPool; import java.sql.Connection; import java.sql.DriverManager; import cn.com.jacken.JPool.javabeans.DbConfig; public class JConnectionPoolImplextendsIJConnectionPool { public JConnectionPoolImpl(int count, DbConfig config) throws Exception { this.init(count, config); } @Override publicConnectiongetConnection() throws Exception { Connection conn = null; Object[] objList = this.connectionContainer.keySet().toArray(); for (Object obj : objList) { String value = this.connectionContainer.get("obj"); // 判断状态是否为FREE if (true == value.equals("FREE")) { // 如果当前Connection状态确实为FREE conn = (Connection) obj; // 将实例的状态置为BUSY this.connectionContainer.put(conn, "BUSY"); break; } } if (null == conn) { Exception e = new Exception("没有空闲的Connection,请稍候再试!"); throwe; } // 返回实例给客户代码 return conn; } @Override publicvoid init(int count, DbConfig config) throws Exception { // 循环的添加Connection实例到Hashtable中 for (int i = 0; i < count; i++) { // 产生Connection实例 Class.forName(config.getJdbcDriver()); Connection conn = DriverManager.getConnection(config.getUrl(), config.getUserName(), config.getPassword()); // 将Connection实例添加到Hashtable中 this.connectionContainer.put(conn, "FREE"); } } @Override publicvoid returnConnection(Connection conn) { // 将实例的状态置为FREE this.connectionContainer.put(conn, "FREE"); } }
使用Tomcat的连接池
1,配置连接池:在conf目录下的context.xml中,添加一项(可以配置多项): 下载: context.xml
2,将数据库驱动添加到Tomcat的classPath中或者复制到%TomcatHome%/common/lib下.
3,在代码中使用连接池,获得Connection 实例. //...... Connection conn = null; // 获得连接池环境 Contextctx = newInitialContext(); // 获得数据源 DataSource ds = (DataSource) ctx.lookup("java:comp/env/jacken"); // 从数据源中 获得Connection实例 conn = ds.getConnection(); // 执行SQL Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); //......