java 重试机制总结

xiaoxiao2021-02-28  95

一、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 任意版本

转载请注明原文地址: https://www.6miu.com/read-46128.html

最新回复(0)