我很确定其他人已经问过这个问题,但是我仍然找不到满意的答案。因此,这是我的情况:我想使用Oracle的JDBC驱动程序隐式语句缓存(在此处记录:http : //docs.oracle.com/cd/B28359_01/java.111/b31224/stmtcach.htm#i1072607)
我需要使用来自第三方JDBC池提供程序的连接(更具体地说,是Tomcat JDBC),我在那里别无选择。
问题在于启用隐式缓存的方法是一个两步过程(根据文档):
1。
在连接上调用setImplicitCachingEnabled(true),或者将ImplicitCachingEnabled属性设置为true来调用OracleDataSource.getConnection。您可以通过调用OracleDataSource.setImplicitCachingEnabled(true)来设置ImplicitCachingEnabled。
2。
除了调用这些方法之一之外,您还需要在物理连接上调用OracleConnection.setStatementCacheSize。您提供的参数是高速缓存中的最大语句数。参数0指定不缓存。
我可以使用1(以某种方式可以将我的池配置为将OracleDataSource用作主要连接工厂,并可以在上设置OracleDataSource.setImplicitCachingEnabled(true))。但是在第二步中,我已经需要存在连接才能调用setStatementCacheSize。
我的问题是,是否有可能在数据源级别指定的默认值,statementCacheSize以便我可以从OracleDataSource已启用隐式缓存的连接中获取数据。
PS:我在这里发现了一些相关的问题: Oracle jdbc驱动程序:隐式语句缓存还是setPoolable(true)?
更新(可能的解决方案):
最终我做到了:
oracle.jdbc.pool.OracleDataSource。org.apache.tomcat.jdbc.pool.DataSource使用本地池创建了一个tomcat JDBC连接池(请参阅属性dataSource)。该解决方案效果很好;我只是为自己必须写一些样板而感到不高兴(我期待一个直截了当的属性)。