2011-07-27 4 views
0

저는 Spring, JDBCTemplate 및 c3p0을 사용하여 데이터베이스 액세스 권한이있는 웹 응용 프로그램을 개발 중입니다.JDBCTemplate 및 c3p0을 사용하는 연결이 너무 많습니다.

나는 종종 서버가 멈추고, 꽤 바쁜 데이터베이스 연결의 수에서 오는 것이라고 확신한다. jconsole을 사용하여 응용 프로그램 동작을 보면 ComboPooledDataSource의 maxPoolSize에 도달했으며 서버가 페이지를 더 이상로드하지 않는다는 것을 알 수 있습니다.

데이터 소스 정의 :

<Resource auth="Container" description="GDLWeb DB Connection" 
    driverClass="org.postgresql.Driver" 
    maxPoolSize="16" 
    minPoolSize="1" 
    acquireIncrement="1" 
    maxIdleTime="60" 
    maxStatements="0" 
    idleConnectionTestPeriod="1800" 
    acquireRetryAttempts="30" 
    breakAfterAcquireFailure="true" 
    name="jdbc/gdlweb" 
    user="gdlweb" 
    password="" 
    factory="org.apache.naming.factory.BeanFactory" 
    type="com.mchange.v2.c3p0.ComboPooledDataSource" 
    jdbcUrl="jdbc:postgresql://localhost:5432/postgres" 
/> 

일반적인 접근 방법 (DAO 클래스) :

protected T getPersistentObject(
     final String tableName, 
     final List<WhereClause> whereParams, 
     final RowMapper<T> rowMapper) { 

    try { 
     log.debug(this, "get " + tableName + " " + whereParams); 
     return (T) getTemplate().queryForObject(
       generateSelectStar(tableName, whereParams), 
       extractValueMap(whereParams), 
       rowMapper); 
    } catch (final EmptyResultDataAccessException e) { 
     log.warning(this, "No " + tableName + " found with " + whereParams + " in the DB!"); 
     return null; 
    } 
} 

내가 100에 maxPoolSize을 높이기 위해 노력 여기

는 유용한 코드입니다 , 내 postgresql 서버에 정의 된 maxConnections입니다. 이렇게하면 postgresql 서버가 충돌하기 직전에 현재 43 개의 연결이 열려 있음을 알 수 있습니다.

나는 아마도 JDBCTemplate을 잘못된 방법으로 사용하고 있지만 어디에 있는지 모른다.

감사합니다.

답변

관련 문제