在我的 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 的内容时。
这意味着:
所以你只需要改变声明:
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/