apache 프로젝트의 commons-dbcp 를 이용하여 connection pool 만들기.
알짜정보
2008/08/15 00:00
connection pool 같이 성능에 지대한 영향을 미치는것들은 이런 유명라이브러리를 사용하여 만드는게 맞다고 본다. 일단 믿을수 있으니까.
그런데 문제는 apache 의 commons-dbcp 는 여러 컨테이너나 웹 프레임워크 상에서 지원하지만, 정작 그런 컨테이너나 프레임워크의 도움 없이는 사용하는방법을 몰랐었다.
나중에도 유용할꺼 같아서 네이버를 뒤져서 만들어봤다.
먼저 필요한 라이브러리를 받자.
1. commons-dbcp --> http://commons.apache.org/dbcp/
2. commons-pool --> http://commons.apache.org/pool/
<ConnectionPool.java>
package common.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.DriverManager;
import org.apache.commons.dbcp.ConnectionFactory;
import org.apache.commons.dbcp.DriverManagerConnectionFactory;
import org.apache.commons.dbcp.PoolableConnectionFactory;
import org.apache.commons.dbcp.PoolingDriver;
import org.apache.commons.pool.impl.GenericObjectPool;
import org.apache.commons.dbcp.DriverManagerConnectionFactory;
import org.apache.commons.dbcp.PoolableConnectionFactory;
import org.apache.commons.dbcp.PoolingDriver;
import org.apache.commons.pool.impl.GenericObjectPool;
public class ConnectionPool {
private String driverName = null;
private String poolingDriverClassName = "org.apache.commons.dbcp.PoolingDriver";
private String poolUrl = "jdbc:apache:commons:dbcp:";
private String driverName = null;
private String poolingDriverClassName = "org.apache.commons.dbcp.PoolingDriver";
private String poolUrl = "jdbc:apache:commons:dbcp:";
public ConnectionPool(String driverName,String driverClassName,String dbUrl,String dbUserId,String dbUserPass) {
this(driverName,driverClassName,dbUrl,dbUserId,dbUserPass,30,10,100,false,true);
}
public ConnectionPool(String driverName,String driverClassName,String dbUrl,String dbUserId,String dbUserPass,int maxActive,int maxIdle,int maxWait) {
this(driverName,driverClassName,dbUrl,dbUserId,dbUserPass,maxActive,maxIdle,maxWait,false,true);
}
public ConnectionPool(String driverName,String driverClassName,String dbUrl,String dbUserId,String dbUserPass,int maxActive,int maxIdle,int maxWait,boolean isReadOnly,boolean isAutoCommit) {
this.driverName = driverName;
try {
Class.forName(driverClassName);
this(driverName,driverClassName,dbUrl,dbUserId,dbUserPass,30,10,100,false,true);
}
public ConnectionPool(String driverName,String driverClassName,String dbUrl,String dbUserId,String dbUserPass,int maxActive,int maxIdle,int maxWait) {
this(driverName,driverClassName,dbUrl,dbUserId,dbUserPass,maxActive,maxIdle,maxWait,false,true);
}
public ConnectionPool(String driverName,String driverClassName,String dbUrl,String dbUserId,String dbUserPass,int maxActive,int maxIdle,int maxWait,boolean isReadOnly,boolean isAutoCommit) {
this.driverName = driverName;
try {
Class.forName(driverClassName);
GenericObjectPool connectionPool = new GenericObjectPool(null);
connectionPool.setMaxActive(maxActive);
connectionPool.setMaxIdle(maxIdle);
connectionPool.setMaxWait(maxWait);
ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(dbUrl,dbUserId,dbUserPass);
PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory,connectionPool,null,null,isReadOnly,isAutoCommit);
connectionPool.setMaxActive(maxActive);
connectionPool.setMaxIdle(maxIdle);
connectionPool.setMaxWait(maxWait);
ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(dbUrl,dbUserId,dbUserPass);
PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory,connectionPool,null,null,isReadOnly,isAutoCommit);
Class.forName(poolingDriverClassName);
PoolingDriver driver = (PoolingDriver)DriverManager.getDriver(poolUrl);
driver.registerPool(driverName, connectionPool);
}
catch(Exception e) {
throw new RuntimeException(e);
}
}
public Connection getConnection() {
Connection conn = null;
try {
conn = DriverManager.getConnection(poolUrl+driverName);
} catch (Exception e) {
throw new RuntimeException(e);
}
return conn;
}
}
PoolingDriver driver = (PoolingDriver)DriverManager.getDriver(poolUrl);
driver.registerPool(driverName, connectionPool);
}
catch(Exception e) {
throw new RuntimeException(e);
}
}
public Connection getConnection() {
Connection conn = null;
try {
conn = DriverManager.getConnection(poolUrl+driverName);
} catch (Exception e) {
throw new RuntimeException(e);
}
return conn;
}
}
이제 클래스 생성하고 getConnection() 을 호출하면 connection pool 에 의해 얻어진 connection 을 쓸 수 있다.







댓글을 달아 주세요