连接池与使用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对连接进行管理:计数、监控连接状态;

ConnectionPool-JPool

自己写个连接池? ?一般情况下不要使用自己写的连接池,很多应用提供连接池,它们的更好更安全更专业…

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 connectionContainer = newHashtable(); public abstract void init(int count, DbConfig config) throws Exception; public abstract Connection getConnection() throws Exception; public abstract void returnConnection(Connection conn); }

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

WEB-INF/web.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); //......

希望本站内容对您有点用处,有什么疑问或建议请在后面留言评论
转载请注明作者(RobinChia)和出处 It so life ,请勿用于任何商业用途