达到acquireRetryAttempts后,c3p0 getConnection不会返回或抛出异常

时间:2011-02-28 18:47:03

标签: java jdbc c3p0

使用c3p0作为我的连接池,在连接池耗尽其重试次数后,调用c3p0的线程似乎被终止或处于未定义状态。

连接池定义如下:

    private val pool = new ComboPooledDataSource
    pool.setDriverClass(config("database.driverClass").as[String])
    pool.setJdbcUrl(config("database.jdbcUrl").as[String])
    pool.setUser(config("database.user").as[String])
    pool.setPassword(config("database.password").as[String])
    pool.setAcquireRetryAttempts(5)

客户端代码调用getConnection,它会在c3p0通过连接重试尝试旋转时短暂阻塞。奇怪的是,它似乎并没有从这个电话回来。从文档中,我预计会抛出异常:

If all attempts fail, any clients waiting for Connections from the 
DataSource will see an Exception, indicating that a Connection 
could not be acquired

这很奇怪。它绝对不会返回,并且它不会抛出异常。从Executors.newSingleThreadScheduledExecutor调用getConnection的客户端代码每隔5秒运行一次。当对getConnection的调用似乎消失时,预定的执行程序线程似乎也停止执行。

在这种情况下,我故意将数据库关闭,以便我可以弄清楚这里发生了什么。有什么想法吗?

更新:奇怪的是,如果我不使用预定的执行程序而是在我自己的监视器线程中运行它,那么#getConnection将按预期执行。

0 个答案:

没有答案