首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重试数据库连接Drop向导

重试数据库连接Drop向导
EN

Stack Overflow用户
提问于 2020-11-04 17:18:16
回答 1查看 298关注 0票数 0

如果连接第一次不能工作,如何重试连接到数据库?我使用jdbi3进行数据库连接。

代码语言:javascript
复制
  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,但异常从未被捕获。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-04 17:22:43

这将最终导致堆栈溢出。更好的是:

代码语言:javascript
复制
while (true) {
    try (
        new Application().run(args);
        return;
    } catch (SQLException e) {
        continue;
    }
}

但这并不是全部:这将在任何SQL异常上重试。所以,比方说,如果数据库启动了,但是应用程序做的第一件事就是创建一个表,但是这个表已经存在了,这只会在2秒的时间间隔内再次尝试并失败,这是非常令人讨厌的。我建议检查在DB关闭时抛出哪个-实际的- SQLException (大概这就是您想重试的原因:等待DB返回),并且只捕获那个。请注意,SQLException比大多数异常类型都有更多的方法,例如.getSQLState(),您应该检查该方法是否实际上是“无法连接到DB引擎”,而不是其他一些问题。

此外,应用程序的run()方法很可能捕获所有异常,并将它们记录下来,这意味着捕捉它们的尝试不会做任何事情。在这种情况下,您必须编辑run()的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64684779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档