问题:即使使用连接池技术,仍有大量未关闭的数据库物理连接。有人能告诉我为什么吗?
我使用oracle.jdbc.pool.OracleDataSource
配置了连接池设置。然而,似乎在使用后物理连接并没有被关闭。
我认为,既然是连接池,那么连接应该从池中重复使用,因此不会建立那么多物理连接,
但现在情况并非如此!
由于应用程序造成了100多个活动物理连接[而非plsql developer或其他客户端工具],导致在尝试对数据库进行写操作时出现TNS错误, 而读取操作即使有大量活动连接也没有问题。
以下是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多个活动连接的SQL是,
select username, terminal,schemaname, osuser,program from v$session where username = 'grduser'