gpt4 book ai didi

java - 为什么 Oracle 的 PoolDataSource 忽略 connectionProperties 值?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:09:39 27 4
gpt4 key购买 nike

在我的 Tomcat contex.xml 文件中,我有这个数据源声明:

<Resource name="jdbc/my_ds" auth="Container" factory="oracle.ucp.jdbc.PoolDataSourceImpl" 
type="oracle.ucp.jdbc.PoolDataSource" description="UCP Pool in Tomcat"
connectionFactoryClassName="oracle.jdbc.pool.OracleDataSource" minPoolSize="1" maxPoolSize="10"
initialPoolSize="2" inactiveConnectionTimeout="20" setMaxIdleTime="1800"
user="my_user" password="my_password"
url="jdbc:oracle:thin:@mydb.com:1234:DATABASEID" connectionPoolName="MY_UCPPool"
connectionProperties="defaultBatchValue=7000,defaultRowPrefetch=7000" validateConnectionOnBorrow="true"/>

但是在我的 DAO 代码中,当我检查提取大小时它没有按预期返回 7000:

if (s.getFetchSize() < 100) {
log.warn("fetch size is too small: " + s.getFetchSize());
}

最佳答案

在对PoolDataSourceImpl类进行反编译后,发现了这段代码:

propStrs = cfPropsStr.substring(1, cfPropsStr.length() - 1).split(", ");

当它正在解析 connectionProperties 的内容时。

这意味着:

  1. 分隔符是“,”而不是“,”
  2. 第一个和最后一个字符被丢弃

所以你只需要改变声明:

connectionProperties="defaultBatchValue=7000,defaultRowPrefetch=7000"

到:

connectionProperties=" defaultBatchValue=7000, defaultRowPrefetch=7000 "

甚至:

connectionProperties="_defaultBatchValue=7000, defaultRowPrefetch=7000_"

注意开头和结尾不需要空格,可以是任意字符。

使用初始配置,结果将是键“efaultBatchValue”和值“7000,defaultRowPrefetch=700”。

关于java - 为什么 Oracle 的 PoolDataSource 忽略 connectionProperties 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30626131/

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