Один таймер не спасает запрос к базе
Пять секунд в настройке ещё не гарантируют, что запрос остановился и освободил соединение.
Для обычного SQL-запроса Java задаёт отдельный срок. После его превышения driver возвращает SQLTimeoutException и пытается отменить работу. Это ещё не доказательство, что сервер базы уже остановился.
Для полностью зависшей сети действует аварийный предел. В терминах JDBC network timeout помечает connection closed — проще говоря, Java закрывает соединение. Oracle рекомендует делать этот срок длиннее обычного времени на запрос.
PostgreSQL разделяет долгий запрос, ожидание занятой записи и забытую открытую транзакцию. Им нужны разные пределы.
Мой порядок:
— срок всей пользовательской операции;
— меньший срок для SQL;
— ещё меньший — для ожидания блокировки;
— аварийное закрытие сети последним.
После ошибки проверяю, что запрос остановлен, а соединение вернулось в пул.
#Java #JDBC #PostgreSQL #reliability
Пять секунд в настройке ещё не гарантируют, что запрос остановился и освободил соединение.
Для обычного SQL-запроса Java задаёт отдельный срок. После его превышения driver возвращает SQLTimeoutException и пытается отменить работу. Это ещё не доказательство, что сервер базы уже остановился.
Для полностью зависшей сети действует аварийный предел. В терминах JDBC network timeout помечает connection closed — проще говоря, Java закрывает соединение. Oracle рекомендует делать этот срок длиннее обычного времени на запрос.
PostgreSQL разделяет долгий запрос, ожидание занятой записи и забытую открытую транзакцию. Им нужны разные пределы.
Мой порядок:
— срок всей пользовательской операции;
— меньший срок для SQL;
— ещё меньший — для ожидания блокировки;
— аварийное закрытие сети последним.
После ошибки проверяю, что запрос остановлен, а соединение вернулось в пул.
#Java #JDBC #PostgreSQL #reliability