在Java程序中重试特定方法

时间:2015-09-02 16:39:12

标签: java

我在下面有这段代码,在这段代码中,当程序发生任何异常时,它会重试整个程序。这似乎工作正常。但是,当一个程序中有数百万个方法时,如果它每次遇到异常时重试整个程序,这似乎有点太多了。

我在这里想说的是,假设我在程序,方法1,方法2,方法3,方法4和方法5中有5个方法。如果找到方法3异常,它应该只重试方法3而不是重试整个程序。并且类似地,如果程序在方法5中发生错误,它应该只重试方法5.

这是我到目前为止所拥有的。在此代码中,如果检测到方法1,或2或3或4或5,它将重新启动整个程序。我不希望这样,我只想在方法中找到异常的地方重试。我不知道如何解决这个问题。帮助将不胜感激。一些参考代码将非常有用,谢谢:)

Test.java

public class Test {

     private static MAX_RETRIES = 3; 

     public static void main (String [] args) {

      int retryAttempt = 1;

      while (retryAttempt <= MAX_RETRIES) {

        try{
             method 1;
             method 2; 
             method 3; 
             method 4; 
             method 5;

             break;

        }catch(Exception e){


          e.printStackTrace();

              retryAttempt ++;

               if (retryAttempt == MAX_RETRIES){

                     //do something here 

                     return;
                }
         }
      }

    }
}

2 个答案:

答案 0 :(得分:1)

您可能需要查看http://aspects.jcabi.com/@RetryOnFailure

答案 1 :(得分:0)

您可以创建一个布尔数组来指示哪些方法正常。使用&#34; ok&#34;,我的意思是&#34;该方法没有任何问题&#34;。因此,在调用&#34;方法1&#34;之前,请检查if(!isOk[1]) { method1(); isOk[1] = true;},并检查其他方法的相同内容。

你甚至可以这样做:

而不是:

try{
             method 1;
             method 2; 
             method 3; 
             method 4; 
             method 5;

             break;

        }

你可以这样做:

try{
             if(!isOk[1]) {method1(); isOk[1] = true;}
             if(!isOk[2]) {method2(); isOk[2] = true;}
             if(!isOk[3]) {method3(); isOk[3] = true;} 
             if(!isOk[4]) {method4(); isOk[4] = true;} 
             if(!isOk[5]) {method5(); isOk[5] = true;}

             break;

        }

当然,您必须创建:boolean isOk[] = new boolean[6]; //或任何方法编号。 注意:为了确保它们最初是错误的,您可以这样做:for(int i = 0; i < 6; i++) isOk[i] = false;