3

私は 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 との相性が良いのはどれですか?

4

1 に答える 1

1

jOOQ 3.x では、その領域にかなりの数の変更と修正が加えられました。最も重要なものは次のとおりです。

または、他のプーリングフレームワークを使用する必要がありますか?

ここでは、別のプーリング フレームワークが役立つとは思いません。

(jOOQ 3.2 にアップグレードするのではなく) jOOQ 2.6.1 で作業を続けたい場合は、次のいずれかを行う必要があると思います。

  • jOOQ にパッチを適用してこの問題を修正する
  • DataSource/ライフサイクルを自分で処理し、ConnectionaConnectionを jOOQ に渡します
于 2013-12-15T06:27:58.620 に答える