他の誰かがすでにこの質問をしていることは確かですが、それでも満足のいく答えを見つけることができませんでした。したがって、これが私のシナリオです。OracleのJDBCドライバーの暗黙的なステートメントキャッシングを使用したいと思います(ここに記載されています:http://docs.oracle.com/cd/B28359_01/java.111/b31224/stmtcach.htm#i1072607)
サードパーティのJDBCプールプロバイダー(より具体的にはTomcat JDBC)からの接続を使用する必要があり、そこで選択することはできません。
問題は、暗黙的なキャッシュを有効にする方法が2段階のプロセスであるということです(ドキュメントによると)。
1.1。
接続でsetImplicitCachingEnabled(true)を呼び出すか、ImplicitCachingEnabledプロパティをtrueに設定してOracleDataSource.getConnectionを呼び出します。OracleDataSource.setImplicitCachingEnabled(true)を呼び出して、ImplicitCachingEnabledを設定します。
2.2。
これらのメソッドの1つを呼び出すことに加えて、物理接続でOracleConnection.setStatementCacheSizeを呼び出す必要もあります。指定する引数は、キャッシュ内のステートメントの最大数です。引数0は、キャッシュがないことを指定します。
私は1で生活することができます(どういうわけかOracleDataSource
、プライマリ接続ファクトリとしてを使用するようにプールを構成し、その上でを設定できますOracleDataSource.setImplicitCachingEnabled(true)
)。しかし、2番目のステップでは、を呼び出すために接続が存在している必要がありますsetStatementCacheSize
。
私の質問は、暗黙のキャッシュがすでに有効になっている接続statementCacheSize
から取得できるように、データソースレベルでデフォルト値を指定する可能性があるかどうかです。OracleDataSource
PS:ここで見つけたいくつかの関連する質問: Oracle jdbcドライバー:暗黙のステートメントキャッシュまたはsetPoolable(true)?
更新(可能な解決策):
最終的に私はこれをしました:
- を使用してネイティブ接続プールを作成しました
oracle.jdbc.pool.OracleDataSource
。 - ネイティブプールを使用するTomcatJDBC接続プールを作成しました
org.apache.tomcat.jdbc.pool.DataSource
(プロパティを参照dataSource
)。 - 'execution(public java.sql.Connection oracle.jdbc.pool.OracleDataSource.getConnection())'の実行後にオブジェクトを取得し、必要な設定を実行できるように、AOPを介してポイントカットを有効にします。
このソリューションはうまく機能します。私はそれを行うためにいくつかの定型文を書かなければならなかったことにただ不幸です(私は単純な特性を期待していました)。