从https://mariadb.com/kb/en/library/about-mariadb-connector-j/,对于选项autoReconnect,当不使用故障转移和负载平衡模式时启用此参数时,连接器将在失败后仅尝试重新连接到其主机。这称为基本故障转移。
但是问题是服务器故障后重新连接无法正常工作。测试代码如下:
@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,例外情况是“对等连接重置:套接字写入错误。”
我的问题是基本故障转移不起作用,还是我的测试代码错误?我无法从网络上找到其他信息,如果您知道的话,可以请给我一些解释吗?