В настоящее время в нашем проекте используется новейшая библиотека v5.1 mysql-connector-java
(5.1.47), и мы планируем обновить ее до последней стабильной версии v8.0 (8.0.16).
У нас есть пользовательская реализация интерфейса com.mysql.jdbc.ExceptionInterceptor
, которая для определенного кода ошибки не только распространяет исключение, но и force закрывает само нарушающее соединение.
Это делается путем реализации методов:
SQLException interceptException(SQLException sqlEx, Connection conn);
void init(Connection conn, Properties props) throws SQLException;
Эта реализация полезна, поскольку нашей базой данных является AWS Aurora (MySQL 5.7), в которой имеется механизм переключения при отказе между двумя экземплярами (master и slave). При переключении с одного экземпляра на другой возникает исключение SQLException с кодом ошибки 1290 ( Сервер MySQL работает с параметром --read-only, поэтому он не может выполнить этот оператор ). Принудительное закрытие соединения гарантирует, что после сбоя соединение сможет безопасно снова подключиться прозрачно к приложению Java.
В v8.0 кроме того факта, что имя перехватчика было изменено на com.mysql.cj.exceptions.ExceptionInterceptor
, сигнатуры методов теперь изменены и не имеют соединения в качестве аргумента:
Exception interceptException(Exception sqlEx);
ExceptionInterceptor init(Properties props, Log log);
Есть ли способ получить доступ к нарушающему соединению с новым интерфейсом?