如果连接第一次不能工作,如何重试连接到数据库?我使用jdbi3进行数据库连接。
public static void main(String[] args) throws Exception {
startApp(args);
}
private static void startApp(String[] args) throws Exception {
try {
new Application().run(args);
} catch(SQLException ex) {
System.out.println("Could not connect to database.");
System.out.println("Try reconnecting...");
TimeUnit.SECONDS.sleep(2);
startApp(args);
}
}我实现了这一点,因为如果没有连接,new Application().run(args)将抛出SQLException,但异常从未被捕获。
发布于 2020-11-04 17:22:43
这将最终导致堆栈溢出。更好的是:
while (true) {
try (
new Application().run(args);
return;
} catch (SQLException e) {
continue;
}
}但这并不是全部:这将在任何SQL异常上重试。所以,比方说,如果数据库启动了,但是应用程序做的第一件事就是创建一个表,但是这个表已经存在了,这只会在2秒的时间间隔内再次尝试并失败,这是非常令人讨厌的。我建议检查在DB关闭时抛出哪个-实际的- SQLException (大概这就是您想重试的原因:等待DB返回),并且只捕获那个。请注意,SQLException比大多数异常类型都有更多的方法,例如.getSQLState(),您应该检查该方法是否实际上是“无法连接到DB引擎”,而不是其他一些问题。
此外,应用程序的run()方法很可能捕获所有异常,并将它们记录下来,这意味着捕捉它们的尝试不会做任何事情。在这种情况下,您必须编辑run()的代码。
https://stackoverflow.com/questions/64684779
复制相似问题