【问题标题】:AutoCommit did not work with jOOQ 2.6.1 and Tomcat poolingAutoCommit 不适用于 jOOQ 2.6.1 和 Tomcat 池
【发布时间】:2013-12-15 00:00:50
【问题描述】:

我使用 jOOQ 2.6.1 和来自 Tomcat (docs) 的池,并且我已将 autocommit 设置为 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?

【问题讨论】:

    标签: java tomcat jooq pooling autocommit


    【解决方案1】:

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

    还是应该使用其他池化框架?

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

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

    • 修补 jOOQ 并修复此问题
    • 自己处理DataSource / Connection 生命周期并将Connection 传递给jOOQ

    【讨论】:

    • jooq 3.x 的问题是我们必须迁移很多东西。修补这个问题会更容易。但我不知道从哪里开始。我到底应该在代码中打什么补丁?
    • 我同意,对于这样的问题,迁移到 jOOQ 3.x 的影响可能太大了。但该领域的各种修复并非易事。修补它们并不容易。如果您希望我们帮助您为 jOOQ 2.6.x 解决此问题,您可能会很幸运通过contacting us through the support channelsuser group。由您来评估这是否比自己维护连接生命周期更容易。无论如何,我认为这超出了 Stack Overflow 问题的范围。
    • 最长时间它适用于被放弃的连接,因为我设置了选项“setRemoveAbandoned(true);setRemoveAbandonedTimeout(10);”所以连接正在返回到池中。但有时我会收到以下错误:this exc:org.springframework.jdbc.UncategorizedSQLException: jOOQ; SQL 的未分类 SQLException ... SQL 状态 [null];错误代码[0];连接已经关闭。;嵌套异常是 java.sql.SQLException:连接已关闭。”如果您知道“连接已关闭”问题的解决方案,这将对我有所帮助。
    • 让我们在jOOQ User Group 上讨论这个问题。请提供堆栈跟踪,也许是重现此问题的简单案例。对于 Stack Overflow 上的小空间来说,这将是太多了......
    猜你喜欢
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多