c3p0 getConnection не возвращает и не генерирует Exception после достижения acquRetryAttempts - PullRequest
2 голосов
/ 28 февраля 2011

Используя 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

Это очень странно.Он определенно не возвращается и не генерирует Exception. Код клиента, вызывающий getConnection из Executors.newSingleThreadScheduledExecutor, который запускается каждые 5 секунд.Когда вызов getConnection, кажется, испаряется, запланированный поток исполнителя также, кажется, вообще перестает выполняться.

В этом случае я намеренно оставляю базу данных отключенной, чтобы понять, что здесь происходит.Есть идеи?

ОБНОВЛЕНИЕ: как ни странно, если я не использую запланированного исполнителя и вместо этого запускаю его в своем собственном потоке монитора, #getConnection работает как положено.

...