コネクションプールについて
コネクションプール有とコネクションプール無でDB接続・切断を繰り返したときに
どれくらい差があるか試してみようと思いWebアプリ上(フレームワークにStruts2を使用)で
下記コードを実行してみました。
dbcpConnectメソッド(コネクションプール有) と jdbcConnectメソッド(コネクションプール無)
をそれぞれ千回づつループで回して実行してみました。
結果は
【コネクションプール有】実行にかかった時間:157384 ミリ秒
【コネクションプール無】実行にかかった時間:158760 ミリ秒
で大差はありませんでした。
コネクションプールを使用するともう少し早いと思っていたのですがそのようなことはないのでしょうか。
public String test4() {
// コネクションプール有の接続
long start = System.currentTimeMillis();
for(int i=0; i< 1000; i++)
{
dbcpConnect();
}
long stop = System.currentTimeMillis();
System.out.println("実行にかかった時間は " + (stop - start) + " ミリ秒です。");
// コネクションプール無の接続
start = System.currentTimeMillis();
for(int i=0; i< 1000; i++)
{
jdbcConnect();
}
stop = System.currentTimeMillis();
System.out.println("実行にかかった時間は " + (stop - start) + " ミリ秒です。");
return "jstl4";
}
public void dbcpConnect() {
Connection con = null;
try{
Context context = new InitialContext();
//DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/library");
DataSource ds = (DataSource)context.lookup("java:/comp/env/jdbc/dhcpTest");
con = ds.getConnection();
Statement stmt = con.createStatement();
String sql = "SELECT * FROM test.test";
ResultSet rs = stmt.executeQuery(sql);
} catch(Exception e) {
System.out.println("Error");
} finally {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public void jdbcConnect() {
Connection con = null;
try{
con = DriverManager.getConnection("jdbc:mysql://localhost", "root", "root");
Statement stmt = con.createStatement();
String sql = "SELECT * FROM test.test";
ResultSet rs = stmt.executeQuery(sql);
} catch(Exception e) {
System.out.println("Error");
} finally {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
お礼
なるほど。参考になりました。 ありがとうございました。