一、try-catch
public class MyTest {
public static void main(String [] args) {
try{
testRedo();
} catch (Exception e) {
testRedo();
e.printStackTrace();
}
}
private static void testRedo() {
System.out.println("执行Redo代码");
throw new RuntimeException();
}
}
二、do-while(包括变种:while、递归)
public class MyTest {
public static void main(String [] args) {
int maxRetryTime = 5;
int time = 0;
String result = null;
do {
time++;
try {
result = testRedo();
} catch (Exception e) {
e.printStackTrace();
}
} while (null == result && time < maxRetryTime);
}
private static String testRedo() {
System.out.println("执行Redo代码");
// 操作成功,返回结果,操作失败返回null
return null;
}
}
三、spring-retry
import org.springframework.retry.RecoveryCallback;
import org.springframework.retry.RetryCallback;
import org.springframework.retry.RetryContext;
import org.springframework.retry.policy.SimpleRetryPolicy;
import org.springframework.retry.support.RetryTemplate;
public class MyTest {
public static void main(String [] args) {
final String params = "传入参数,可为任意类型,final修饰即可";
// 重试机制
RetryTemplate oRetryTemplate = new RetryTemplate();
SimpleRetryPolicy oRetryPolicy = new SimpleRetryPolicy();
oRetryPolicy.setMaxAttempts(5);// 重试5次
oRetryTemplate.setRetryPolicy(oRetryPolicy);
try {
// obj为doWithRetry的返回结果,可以为任意类型
Object obj = oRetryTemplate.execute(new RetryCallback<Object, Exception>() {
@Override
public Object doWithRetry(RetryContext context) throws Exception {// 开始重试
System.out.println(params);
testRedo();
return "此处可返回操作结果";
}
}, new RecoveryCallback<Object>() {
@Override
public Object recover(RetryContext context) throws Exception { // 重试多次后都失败了
return null;
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
private static void testRedo() {
System.out.println("执行Redo代码");
throw new RuntimeException();
}
}
需要spring jar包:spring-retry-1.2.0.RELEASE.jar 任意版本