Java 使用C3p0配置重新启动数据库时出现问题

Java 使用C3p0配置重新启动数据库时出现问题,java,oracle11g,c3p0,jdbc-odbc,Java,Oracle11g,C3p0,Jdbc Odbc,我的应用程序有一个计时器,每60秒执行一次。每次执行都将使用C3p0连接池访问oracle数据库。我的应用程序C3p0的现有配置如下(还有其他任务要访问db): * * 现在我遇到了一个问题,当数据库关闭时,计时器会在每次执行时为坏连接抛出SQLEXETION,但当数据库恢复时,它会继续为坏连接抛出SQLEXETION 我认为原因应该是当应用程序启动时,将建立10个连接,并且计时器占用其中一个,当数据库关闭时,连接断开,然后数据库恢复时,计时器仍然使用断开的连接 但我不确定我的假设是否正确,计

我的应用程序有一个计时器,每60秒执行一次。每次执行都将使用C3p0连接池访问oracle数据库。我的应用程序C3p0的现有配置如下(还有其他任务要访问db):

*
*
现在我遇到了一个问题,当数据库关闭时,计时器会在每次执行时为坏连接抛出SQLEXETION,但当数据库恢复时,它会继续为坏连接抛出SQLEXETION

我认为原因应该是当应用程序启动时,将建立10个连接,并且计时器占用其中一个,当数据库关闭时,连接断开,然后数据库恢复时,计时器仍然使用断开的连接

但我不确定我的假设是否正确,计时器每次执行都会使用单个连接,即使它已经断开了

如果我的想法是正确的,我希望将IDLECONNECTONTESTPERIOD减少到60秒以下,这是解决此问题的计时器的时间范围


你能在这个问题上指导我吗?谢谢。

这听起来像是过时的连接,与空闲连接无关。将“TestConnectionOnOnCheckout”属性设置为true。这应该在返回连接之前运行preferredTestQuery。感谢您的回复。请您根据我的配置告诉我,为什么数据库重新启动后应用程序仍然异常。虽然有点晚,但如果您仍然感兴趣,您可能需要阅读,特别是“连接测试的简单建议”部分。它来自c3p0的作者。
*<property name="acquireIncrement" value="1"/>
<property name="initialPoolSize" value="10"/>
<property name="maxPoolSize" value="25"/>
<property name="minPoolSize" value="10"/>
<property name="maxStatements" value="250"/>
<property name="maxStatementsPerConnection" value="10"/>
<property name="numHelperThreads" value="6"/>
<property name="checkoutTimeout" value="30000"/>     
<property name="maxIdleTimeExcessConnections" value="1800"/>    
<property name="idleConnectionTestPeriod" value="900"/>
<property name="preferredTestQuery" value="SELECT 'x' FROM DUAL"/>*