2016-06-22 21 views
0

jooq環境でデータベース接続プーリングとしてdbcpとc3p0を使用しようとしました。どちらもSELECTステートメントでは問題ありませんが、CREATEステートメントとUPDATEステートメントは接続を解放しません。jooq接続プーリングが接続を解放しない

我々は次のようにDBCPを初期化:その後、我々は、クエリごとに接続を取得

public static DataSource setupDataSource(String dbUrl, String dbUserName, String dbPassword) { 
    ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(dbUrl, dbUserName, dbPassword); 
    PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory, null); 
    ObjectPool<PoolableConnection> connectionPool = new GenericObjectPool<>(poolableConnectionFactory); 
    poolableConnectionFactory.setPool(connectionPool); 
    PoolingDataSource<PoolableConnection> dataSource = new PoolingDataSource<>(connectionPool); 
    return dataSource; 
} 

protected final DSLContext jooq; 
public E add(E entity) throws Exception { 
    E transformedEntity = null; 
    try { 
     R persisted; 
     persisted = jooq.insertInto(transformator.getTable()) 
       .set(transformator.createRecord(entity)) 
       .returning() 
       .fetchOne(); 

     transformedEntity = transformator.getEntityFromTableRecord(persisted); 
    } catch (DataAccessException e) { 
     ... 
    } 
    return transformedEntity; 
} 

とエンドたちで:

Connection dbConnection = null; 
    try { 
     dbConnection = dataSource.getConnection(); 
} .... 
DSLContext dslContext = DSL.using(connection, dialect); 

アウト文を作成するには、のように見えます接続を閉じるには

dbConnection.close(); 

問題は、接続が開いたままであり、接続プールがいっぱいになっても接続が作成されないことです。ステートメントと結果セットを閉じる必要がありますか?もしそうなら、どうすればjooqでこれを行うことができますか?

+0

実際には接続できません。 [try-with-resources](https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html)を使用していますか? –

答えて

1

jOOQでこれを行う最も簡単な方法は、データソースをjOOQに直接渡すことです。代わりに:

Connection dbConnection = null; 
    try { 
     dbConnection = dataSource.getConnection(); 
} .... 
DSLContext dslContext = DSL.using(connection, dialect); 

...書く:

DSLContext dslContext = DSL.using(dataSource, dialect); 

こうすることで、jOOQはあなたのために、接続のライフサイクルを管理します。それ以外の場合は、接続がまだ漏れていて、正しく閉じられていない状況があると思われます。

関連する問題