我敢肯定,别人已经问过这个问题,但我仍然无法找到一个满意的答复。 所以,这里是我的情况:我想用Oracle的JDBC驱动隐含语句缓存(这里记载: http://docs.oracle.com/cd/B28359_01/java.111/b31224/stmtcach.htm#i1072607 )
我需要使用从第三方JDBC池提供商的连接(更具体,Tomcat的JDBC),我没有选择那里。
的问题是,以使隐式高速缓存的方式是一个两步过程(相应于文档):
1。
在连接上调用setImplicitCachingEnabled(真)或与ImplicitCachingEnabled属性设置为true呼叫OracleDataSource.getConnection。 您可以设置通过调用OracleDataSource.setImplicitCachingEnabled ImplicitCachingEnabled(真)
2。
除了调用这些方法之一,您还需要调用OracleConnection.setStatementCacheSize物理连接上。 您提供的参数是在高速缓存中的语句的最大数量。 参数0指定没有缓存。
我可以用1生活(不知何故,我可以配置我的池使用OracleDataSource
作为主要连接工厂和我可以设置OracleDataSource.setImplicitCachingEnabled(true)
)。 但在第二个步骤,我已经需要连接存在于为了调用setStatementCacheSize
。
我的问题是,如果有任何的可能性来指定数据源级别的默认值statementCacheSize
,这样我可以从一开始OracleDataSource
那些已经隐式缓存使能连接。
PS:一些相关的问题,我在这里找到: Oracle JDBC驱动程序:含蓄语句缓存或setPoolable(真)?
更新(可能的解决方案):
最后,我这样做:
- 创建使用本机连接池
oracle.jdbc.pool.OracleDataSource
。 - 创建使用Tomcat的JDBC连接池
org.apache.tomcat.jdbc.pool.DataSource
使用本机之一(见属性dataSource
)。 - 通过AOP启用poincut以便执行后“执行(公共java.sql.Connection中oracle.jdbc.pool.OracleDataSource.getConnection())”我拾取对象并执行我想要的设置。
该解决方案的伟大工程; 我只是不开心,我不得不写一些样板做到这一点(我期待一个直接的属性)。