java - AutoCommit 不适用于 jOOQ 2.6.1 和 Tomcat 池

标签 java tomcat jooq pooling autocommit

我使用 jOOQ 2.6.1 和来自 Tomcat 的池化 (docs),并且我已将自动提交设置为 true。

PoolProperties p = new PoolProperties();
p.setDefaultAutoCommit(true); 
p.setJdbcInterceptors("org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;" +
                      "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer");
p.setRemoveAbandoned(true);
p.setRemoveAbandonedTimeout(10);

然后我创建了一个 Apache DataSource 对象:

org.apache.tomcat.jdbc.pool.DataSource dataSource = new DataSource
dataSource.setPoolProperties(p);

我使用 Spring 的 LazyConnectionDataSourceProxy:

LazyConnectionDataSourceProxy lazyConnection = new LazyConnectionDataSourceProxy(dataSource);


从 jOOQ 2.6.1 开始使用 Factory:

public Factory createFactory() {
    Settings settings = new Settings();
    settings.getExecuteListeners().add(
            "de.si.srv.data.SpringExceptionTranslationExecuteListener");
    return new Factory(dataSource, SQLDialect.POSTGRES, settings);
}

例如,如果我像这样选择:

createFactory().select().from().fetch()

... jOOQ 应该会自动关闭连接!但是 jOOQ 不会关闭连接。所有连接都在一段时间后被放弃。

有人知道我的问题的解决方案吗?我希望 jOOQ 自动关闭连接!或者我应该使用其他池框架吗?

哪个更适合 jOOQ?

最佳答案

在 jOOQ 3.x 中围绕该区域进行了相当多的更改和修复,最重要的是:

or should i use an other pooling framework ?

我认为另一个池化框架在这里没有帮助。

如果您想继续使用 jOOQ 2.6.1(而不是升级到 jOOQ 3.2),我想您可能需要:

  • 给 jOOQ 打补丁并解决这个问题
  • 自己处理DataSource/Connection 生命周期并将Connection 传递给jOOQ

关于java - AutoCommit 不适用于 jOOQ 2.6.1 和 Tomcat 池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20589693/

相关文章:

java - 在 Linux 上使用 Java CIFS 客户端库发送文件

java - 使用 Jackson XML Mapper 获取列表

http - Tomcat 和 JMeter 生成 HTTP 404 错误

java - Tomcat7设置Class路径解决NoClassDefNotFound错误

java - JOOQ生成的pojo缺少GenerateValue注释

java - "this"对象与非静态对象

java - 有没有办法获得 Java 通过所有 JVM 使用的总 RAM 内存

tomcat - Spring WS Osgi 示例

java - 如何使用 Jooq 执行与 UNION 连接的任意数量的选择

java - 我可以返回每个值的键列表以将记录映射到映射中吗?