Используя 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 работает как положено.