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;
}
然后我们得到每个查询连接:
Connection dbConnection = null;
try {
dbConnection = dataSource.getConnection();
} ....
DSLContext dslContext = DSL.using(connection, dialect);
营造语句如下:
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;
}
而在最后,我们关闭连接:
dbConnection.close();
问题是连接保持打开状态,并且连接池已满后无法创建连接。我是否需要关闭语句和结果集?如果是的话,我怎么能用jooq来做到这一点?
这听起来像你不是事实上close()ing连接可以。你在使用[try-with-resources](https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html)吗? –