0

я читал на tuning JDBC connection pool configurations и под Настройки в таймаута >>Idle Timeout раздел, он читает:Таймаут времени Tomcat/DBCP: что, если сервер зависает?

Для лучшей производительности установите Idle Timeout в ноль (0) секунд, так что простаивающие соединения не будут удалены. Это гарантирует, что, как правило, нет штрафа при создании новых подключений и отключается поток нисходящего монитора. Однако существует риск того, что сервер базы данных сбросит соединение, которое не используется слишком долго.

Последнее предложение является сбивающим с толку. На Tomcat вы можете указать соединение JDBC в виде поиска JNDI изнутри context.xml. I предположим, что, что Idle Timeout поле по указанной ссылке соответствует требованиям Tomcat's (DBCP) maxIdle.

Так что я спрашиваю: что произойдет, если я установил maxIdle в 0, что говорит DBCP не удалять простоя подключений, но затем сервер зависает (или сбрасывает) незанятое соединение? Есть ли конкретное исключение, которое вызывается? Будет ли приложение просто висеть? Как я могу смягчить такие проблемы, но сохраняю maxIdle в 0?

ответ

1

С пулом соединений Tomcat или DBCP вы бы смягчили такие проблемы, используя проверки, чтобы проверить работоспособность соединения, когда соединение извлечено из пула (это свойство).

С пулом Tomcat вы можете настроить его для периодической проверки незанятых соединений (validateWhileIdle, я полагаю) вместо проверки соединения при каждом его использовании.