我在下面有这段代码,在这段代码中,当程序发生任何异常时,它会重试整个程序。这似乎工作正常。但是,当一个程序中有数百万个方法时,如果它每次遇到异常时重试整个程序,这似乎有点太多了。
我在这里想说的是,假设我在程序,方法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;
}
}
}
}
}
答案 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;