mysql - jooq连接池不释放连接

标签 mysql c3p0 jooq apache-commons-dbcp

我们尝试在 jooq 环境中使用 dbcp 和 c3p0 作为数据库连接池。两者都适用于 SELECT 语句,但 CREATE 和 UPDATE 语句不会释放连接。

我们初始化了 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);

Out create 语句如下所示:

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 做到这一点?

最佳答案

使用 jOOQ 执行此操作的最简单方法是将数据源直接传递给 jOOQ。而不是:

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

...写:

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

这样,jOOQ 将为您管理连接生命周期。否则,我怀疑您只是在某些情况下连接仍然泄漏并且未正确关闭

关于mysql - jooq连接池不释放连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37972190/

相关文章:

mysql - MySQL 命令的奇怪行为 NOT IN | GROUP_CONCAT?

mysql - 将两列值更新到另一列

java - C3P0Registry mbean 未向 MBeanServer 注册。获取 InstanceNotFoundException

jooq - jooq record 取数据时是否使用列索引?

kotlin - 如何告诉 jOOQ KotlinGenerator 不要使所有数据类属性可为空?

MySQL 错误 : Incorrect usage of UPDATE and LIMIT

php - 如何在 ajax 中发送特殊字符作为值并在 php 端进行解码?

java - hibernate/C3P0 : Server crashes after MySQL timeout

java - 使用带有 tomcat 的 c3p0 与 MySQL 的僵尸连接

java - 如何在 jOOQ 中写入 "like ' somevalue%'?