Обработка JDBC закрытых соединений - PullRequest
1 голос
/ 26 марта 2019

Я хочу автоматически переподключиться и повторно отправить последний SQL-запрос, если соединение закрыто (например, на сервере БД, а не потому, что я его закрою).

Я знаю, что мог бы сделать connection.isValid() (что просто SELECT 1 в большинстве реализаций драйверов) перед отправкой каждого запроса, но это расточительно. Я добавлю задержку в оба конца к каждому из моих запросов.

То, что я хотел, было что-то вроде:

  • Отправляет запрос в базу данных
  • Если соединение не работает, переподключите и отправьте тот же запрос
  • Если не удается восстановить соединение, переведите соединение в закрытое состояние Exception.

Есть ли какие-либо рекомендации по этому поводу? Я не могу себе представить, что я первый, кто хочет что-то подобное.

Я подумываю о том, чтобы сделать обертку вокруг java.sql.Connection моего драйвера и запустить этот алгоритм за кулисами, но если что-то еще есть, я был бы признателен, если бы мне не пришлось изобретать все заново (я пытался найти его в Google, но не мог ничего не нашел).

PS: мне не нужен пул соединений, потому что я буду использовать его в экземпляре AWS Lambda, и все известные мне пулы соединений будут просто запускать isValid перед каждым запросом.

1 Ответ

0 голосов
/ 26 марта 2019

Запись вашей собственной обертки вокруг java.sql.Connection, которая ловит ошибки и повторяет операторы после восстановления разорванного соединения, звучит привлекательно, но тогда вам также нужно написать свой собственный PreparedStatement и так далее, верно?

Возможно, лучше было бы централизовать все ваши вызовы JDBC в нескольких местах вашего приложения, т. Е. Написать собственную (тонкую) абстракцию для вызовов JDBC.Тогда вы можете поместить свою магию повтора в одно место.

Я бы определенно использовал пул соединений.Любой пул соединений, который стоит своей соли, может быть настроен на , а не отправлять запрос на сервер.Даже если вы не можете этого избежать, это намного дешевле, чем открытие и закрытие соединения с базой данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...