AutoCommit不适用于jOOQ 2.6.1和Tomcat池

时间:2013-12-15 00:00:51

标签: java tomcat jooq pooling autocommit

我使用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?

1 个答案:

答案 0 :(得分:1)

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

  

或者我应该使用其他池框架吗?

我不认为另一个汇集框架会有所帮助。

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

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