gpt4 book ai didi

java - Oracle 数据源连接池不适用于 Spring 和 JDBCTemplate

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:21:34 28 4
gpt4 key购买 nike

问题:即使有连接池,也有许多 Activity 的未关闭的数据库物理连接。谁能告诉我为什么会这样?

我使用 oracle.jdbc.pool.OracleDataSource 配置了连接池设置。然而,物理连接似乎在使用后没有关闭。我想,既然是连接池,连接会从池中重用,所以不会做那么多物理连接,但现在不是这样!

从应用程序生成的数据库中有 100 多个 Activity 物理连接[不是来自 plsql 开发人员或任何此类客户端工具],由于它在尝试对数据库进行写操作时引发 TNS 错误,即使有大量 Activity 连接,读取操作也很好。

这是Spring的配置,

<bean id="oracleDataSource" class="oracle.jdbc.pool.OracleDataSource" destroy-method="close"
p:URL="${url}"
p:user="${username}"
p:password="${password}"
p:connectionCachingEnabled="true">
<property name="connectionProperties">
<props merge="default">
<prop key="AutoCommit">false</prop>
</props>
</property>
</bean>

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
p:dataSource-ref="oracleDataSource" />

<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="oracleDataSource">
</bean>

返回 100 多个 Activity 连接的 SQL 是,

select username, terminal,schemaname, osuser,program from v$session where username = 'grduser'

最佳答案

您应该配置连接缓存,隐式连接缓存的最大连接数默认值是为数据库配置的最大数据库 session 数。

关于java - Oracle 数据源连接池不适用于 Spring 和 JDBCTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28468350/

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