【发布时间】:2014-07-25 02:16:01
【问题描述】:
这就是我的 c3po Spring 配置的样子;
<property name="idleConnectionTestPeriod" value="120" />
<property name="maxIdleTime" value="1800" />
<property name="maxPoolSize" value="2" />
<property name="unreturnedConnectionTimeout" value="600" />
<property name="numHelperThreads" value="10" />
<property name="maxStatementsPerConnection" value="1" />
我尝试监控与数据库建立了多少连接,因此我在重新启动应用程序后针对我的 Oracle 数据库运行此脚本;
select
substr(a.spid,1,9) pid,
substr(b.sid,1,5) sid,
substr(b.serial#,1,5) ser#,
substr(b.machine,1,6) box,
substr(b.username,1,10) username,
substr(b.osuser,1,8) os_user,
substr(b.program,1,30) program
from v$session b, v$process a
where
b.paddr = a.addr and type='USER' order by spid;
这个脚本结果显示打开了太多的连接,所以假设这个脚本结果确实表明了会话/连接的数量。如何使用我的弹簧配置减少它们?因为无论我改变多少参数结果都不会改变。
【问题讨论】:
-
为了理智,您可能会检查 ResultSet/Statement/Connection 是否已关闭。 maxPoolSize 为 2 是我希望的测试;更短的时间使用更大的现实池可能是更好的测试。
-
@Joop Eggen 如何检查 ResultSet/Statement/Connection 是否已关闭?
-
检查是否关闭主要是通过检查代码和日志来完成的。使用异常日志记录、spring 的 JdbcTemplate、try-with-resources 等有帮助。
标签: java oracle c3p0 spring-jdbc