2011-07-27 10 views
0

私は、Spring、JDBCTemplate、およびc3p0を使用してデータベースアクセスを持つWebアプリケーションを開発しています。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; 
    } 
} 

I 100にmaxPoolSizeを増加しようとここ

は有用コードでありますこれは私のpostgresqlサーバで定義されているmaxConnectionsです。このようにして、postgresqlサーバーがクラッシュする直前に、現在43のビジー状態の接続がオープンされていることがわかりました。

おそらく私はJDBCTemplateを間違った方法で使用していますが、私はどこを知りません。

ありがとうございました。

答えて

1

問題は、使用しているMysql Connector/Jのバージョンに問題がある可能性があります。

私は同じ問題を抱えていました。新しいMysql Connector v5.1.15にアップデートすると、それが解決されました。おかげ

http://dev.mysql.com/doc/refman/5.1/en/cj-news-5-1-14.html

:v5.1.13あなたがバグを修正したバージョンのため

ログの変更を見ている問題につながるバグがあります

関連する問題