小编cri*_*sti的帖子

使用Oracle JDBC驱动程序隐式缓存功能

我很确定其他人已经问过这个问题,但是我仍然找不到满意的答案。因此,这是我的情况:我想使用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)?

更新(可能的解决方案):

最终我做到了:

  1. 使用创建了本地连接池oracle.jdbc.pool.OracleDataSource
  2. org.apache.tomcat.jdbc.pool.DataSource使用本地池创建了一个tomcat JDBC连接池(请参阅属性dataSource)。
  3. 通过AOP启用poincut,以便在执行“ execution(public java.sql.Connection oracle.jdbc.pool.OracleDataSource.getConnection())”之后,拾取对象并执行所需的设置。

该解决方案效果很好;我只是为自己必须写一些样板而感到不高兴(我期待一个直截了当的属性)。

oracle jdbc driver oracle11g

4
推荐指数
1
解决办法
6478
查看次数

标签 统计

driver ×1

jdbc ×1

oracle ×1

oracle11g ×1