С https://mariadb.com/kb/en/library/about-mariadb-connector-j/, для опции autoReconnect. Если этот параметр включен, когда режим отказоустойчивости и балансировки нагрузки не используется, соединитель просто попытается повторно подключиться к своему хосту после сбоя.Это называется Basic Failover.
Но проблема в том, что переподключение не работает после сбоя сервера.Тестовый код выглядит следующим образом:
@Test
public void waitTimeoutResultSetTest() throws SQLException, InterruptedException {
try (Connection connection = setBlankConnection("&autoReconnect=true")) {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT 1");
assertTrue(rs.next());
stmt.execute("set session wait_timeout=1");
Thread.sleep(3000); // Wait for the server to kill the connection
try {
rs = stmt.executeQuery("show databases;");
assertTrue(rs.next());
System.out.println("position 1");
} catch (SQLException e) {
//normal exception
System.out.println("position 2");
}
}
}
При использовании autoReconnect, я думаю, ожидаемый результат заключается в том, что он попадет в положение 1, но на самом деле он попадет в положение 2, за исключением того, что «Сброс соединения по одноранговому узлу: ошибка записи в сокет. "
Мой вопрос таков: не работает ли базовое переключение при сбое или мой тестовый код неверен?Я не могу найти другую информацию в Интернете, не могли бы вы дать мне какое-нибудь объяснение, если вы знаете об этом?