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

标签 java spring oracle11g connection-pooling jdbctemplate

问题:即使有连接池,也有许多 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/

相关文章:

java - 如何根据配置启用/禁用 Spring Memcache(Azure 或 AWS)

java - Apache Camel 模拟端点

java - Oracle 截断日期的时间部分

sql - 将按主键数据排序的存储存储在Oracle DB中

SQL Oracle 查询来比较公司每项工作的男性与女性薪资

java - mvn 单元测试公共(public)资源文件夹和读取文件功能

java - 要获得最佳性能,Android 游戏的最佳格式是什么?

java - 将循环结果添加到数组中?

java - RealmResult 通过数千个对象的迭代很慢

java - 如何在Spring Controller 类中使用路径变量?