MariaDB Connector J: автоматическое переподключение не работает для Basic Faillover - PullRequest
1 голос
/ 19 апреля 2019

С 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, за исключением того, что «Сброс соединения по одноранговому узлу: ошибка записи в сокет. "

Мой вопрос таков: не работает ли базовое переключение при сбое или мой тестовый код неверен?Я не могу найти другую информацию в Интернете, не могли бы вы дать мне какое-нибудь объяснение, если вы знаете об этом?

...