コネクションプーリング

コネクションプーリングのクラスを自作してみました。
Tomcatとか使えばこんなの自作する必要ないんですけどね。



import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.apache.commons.dbcp.ConnectionFactory;
import org.apache.commons.dbcp.DriverManagerConnectionFactory;
import org.apache.commons.dbcp.PoolableConnectionFactory;
import org.apache.commons.dbcp.PoolingDataSource;
import org.apache.commons.pool.impl.GenericObjectPool;

/**
* DBとのコネクション管理を提供するクラスです
*/
public class DataSourceMng {

/** データソース */
private static PoolingDataSource mySqlDataSource = null;

/** インスタンス */
private static DataSourceMng instance = null;

/**
* 初期化<br>
* データベースとのプーリングを開始します
*/
private static synchronized void init() {

if (instance == null) {

instance = new DataSourceMng();
}
}

/**
* DBとのコネクションを取得します
*
* @return Connection
*/
public static synchronized Connection getConnection() {

try {

if (instance == null) {

init();
}

return mySqlDataSource.getConnection();

} catch (SQLException e) {

e.printStackTrace();
throw new RuntimeException(e);
}
}

/**
* ResultSetのclose
*
* @param rs
* ResultSet
*/
public static void close(ResultSet rs) {

if (rs != null) {

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();
}
}
}

/**
* Statementのclose
*
* @param st
* Statement
*/
public static void close(Statement st) {

if (st != null) {

try {

st.close();

} catch (SQLException e) {

e.printStackTrace();
}
}
}

/**
* Connectionのclose
*
* @param con
* Connection
*/
public static void close(Connection con) {

if (con != null) {

try {

con.close();

} catch (SQLException e) {

e.printStackTrace();
}
}
}
/**
* 各種リソースのclose
*
* @param rs
* ResultSet
* @param statement
* Statement
* @param connection
* Connection
*/
public static void close(
ResultSet rs, Statement statement, Connection connection) {

close(rs);
close(statement);
close(connection);
}

/**
* データベースとのコネクションプーリングを生成します
*/
private DataSourceMng() {

try {

Class.forName("com.mysql.jdbc.Driver");
GenericObjectPool pool = new GenericObjectPool();
/* ここは環境に合わせて適宜修正
pool.setMaxActive(100);
pool.setMinIdle(10);
pool.setMaxWait(10);
*/

ConnectionFactory conFactory =
new DriverManagerConnectionFactory(
"url", "db_user_name", "db_user_password");
new PoolableConnectionFactory(
conFactory, pool, null, null, false, true);
mySqlDataSource = new PoolingDataSource(pool);

} catch (Throwable t) {

e.printStackTrace();
}
}
}

0 コメント: