gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:59:34 27 4
gpt4 key购买 nike

我很确定其他人已经问过这个问题,但我仍然找不到满意的答案。
所以,这是我的场景:我想使用 Oracle 的 JDBC 驱动程序隐式语句缓存(记录在这里:http://docs.oracle.com/cd/B28359_01/java.111/b31224/stmtcach.htm#i1072607)

我需要使用来自第 3 方 JDBC 池提供程序(更具体地说,Tomcat JDBC)的连接,我在那里别无选择。

问题是启用隐式缓存的方法是一个两步过程(根据文档):

1.

Call setImplicitCachingEnabled(true) on the connection or Call OracleDataSource.getConnection with the ImplicitCachingEnabled property set to true. You set ImplicitCachingEnabled by calling OracleDataSource.setImplicitCachingEnabled(true)



2.

In addition to calling one of these methods, you also need to call OracleConnection.setStatementCacheSize on the physical connection. The argument you supply is the maximum number of statements in the cache. An argument of 0 specifies no caching.



我可以忍受 1(不知何故,我可以配置我的池以使用 OracleDataSource 作为主要连接工厂,然后我可以设置 OracleDataSource.setImplicitCachingEnabled(true) )。
但是在第二步,我已经需要存在连接才能调用 setStatementCacheSize .

我的问题是是否有可能在数据源级别为 statementCacheSize 指定默认值这样我就可以从 OracleDataSource 得到已启用隐式缓存的连接。

PS:我在这里找到的一些相关问题:
Oracle jdbc driver: implicit statement cache or setPoolable(true)?

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

最终我这样做了:
  • 使用 oracle.jdbc.pool.OracleDataSource 创建 native 连接池.
  • 使用 org.apache.tomcat.jdbc.pool.DataSource 创建了一个 tomcat JDBC 连接池使用 native 的(请参阅属性 dataSource )。
  • 通过 AOP 启用一个 poincut,以便在执行 'execution(public java.sql.Connection oracle.jdbc.pool.OracleDataSource.getConnection())' 后我拾取对象并执行我想要的设置。

  • 该解决方案效果很好;我只是不高兴我不得不写一些样板来做这件事(我期待一个直接的属性)。

    最佳答案

    白皮书Oracle JDBC Memory Management

    The 11.2 drivers also add a new property to enable the Implicit Statement Cache.

    oracle.jdbc.implicitStatementCacheSize

    The value of the property is aninteger string, e.g. “100”. It is the initial size of the statementcache. Setting the property to a positive value enables the ImplicitStatement Cache. The default is “0”. The property can be set as aSystem property via -D or as a connection property via getConnection.

    关于oracle - 使用 Oracle JDBC 驱动程序隐式缓存功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12167108/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com