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