2017년 4월 13일 목요일

[SQL] 커넥션풀 옵션

※ 커넥션 풀의 속성

  • maxActive  : 커넥션 풀이 제공할 최대 커넥션 갯수
  • whenExhaustedAction 커넥션 풀에서 가져올 수 있는 커넥션이 없을 때 어떻게 동작할지를 지정.
    0일 경우 에러 발생.
    1일 경우 maxWait 속성에서 지정한 시간만큼 커넥션을 구할때까지 기다림.
    2일 경우 일시적으로 커넥션을 생성해서 사용
  • maxWait whenExhaustedAction 속성의 값이 1일 때 사용되는 대기 시간.
    단위는 1/1000초, 0보다 작을 경우 무한히 대기
  • maxIdle  사용되지 않고 풀에 저장될 수 있는 최대 커넥션 갯수.
    음수일 경우 제한이 없음
  • minIdle 사용되지 않고 풀에 저장될 수 있는 최소 커넥션 갯수.
  • testOnBorrow : true일 경우 커넥션 풀에서 커넥션을 가져올 때 커넥션이 유효한지의 여부를 검사
  • testOnReturn : true일 경우 커넥션 풀에 커넥션을 반환할 때 커넥션이 유효한지의 여부를 검사 
  • timeBetweenEvctionRunsMillis사용되지 않는 커넥션을 추출하는 쓰레드의 실행 주기 지정.
    양수가 아닐 경우 실행되지 않는다.
    시간 단위는 1/1000초.
  • testWhileIdle true일 경우 비활성화 커넥션을 추출할 때 커넥션이 유효한지의 여부를 검사해서 유효하지 않은 커넥션은 풀에서 제거.



커넥션 풀 API 참조 : http://commons.apache.org/proper/commons-dbcp/apidocs/index.html


[ Java 예제 ]

package com.dataSource.dbcp;
import java.beans.PropertyVetoException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import org.apache.commons.dbcp.BasicDataSource;

public class DataSource {

     private static DataSource     datasource;
     private BasicDataSource ds;

     private DataSource() throws IOException, SQLException, PropertyVetoException {

         ds = new BasicDataSource();
         ds.setDriverClassName("com.mysql.jdbc.Driver");
         ds.setUsername("root");
         ds.setPassword("root");
         ds.setUrl("jdbc:mysql://localhost/test");
       
      // the settings below are optional -- dbcp can work with defaults
         ds.setMinIdle(5);
         ds.setMaxIdle(20);
         ds.setMaxOpenPreparedStatements(180);
     }

     public static DataSource getInstance() throws IOException, SQLException, PropertyVetoException {

         if (datasource == null) {
             datasource = new DataSource();
             return datasource;
         } else {
             return datasource;
         }

     }

     public Connection getConnection() throws SQLException {
         return this.ds.getConnection();
     }

 }

댓글 없음:

댓글 쓰기