如何只允许一定数量的 io 异常?

How to only allow a certain number of io exceptions?

我想知道是否有一种好的标准方法在您停止尝试之前只允许一定数量的 IO 异常(连接超时等),并且可能会发送一封自动电子邮件让其他人知道存在问题。我可以想到一种丑陋的方法来使用 try catch 块,它保留一个计数器并在尝试之前检查该计数器的值。有没有更标准更好的实现方式?

只需创建一个用作计数器的 ìnt 变量:

int counter = 0;
while (true){
    try{
        // do something
        break;
    } catch (IOException e) {
        e.printStackTrace();
        counter++;

        if (counter >= 10)
            throw new RuntimeException(e);
    }
}

它将捕获异常,打印堆栈跟踪,并且仅在计数器超过 10 时才重新抛出异常。由于以下几个原因,电子邮件发送部分会更加困难:

  • 你需要一个图书馆来发送电子邮件(AFAIK)
  • 您需要配置邮件服务器
  • 您需要针对服务器进行身份验证(用户要么需要提供密码,要么您需要对密码进行硬编码 --> 不好的做法)
  • IOException 的一个可能原因可能是机器没有连接到互联网。在这种情况下发送电子邮件也会失败。