我想做个卷帘门网站怎么做,如何建设属于自己的网站,企业推广方案,网站建设框架程序在我们的日常开发中#xff0c;经查会遇到调用接口失败的情况#xff0c;这时候就需要通过一些方法来进行重试#xff0c;比如通过while循环手动重复调用或#xff0c;或者通过记录错误接口url和参数到数据库#xff0c;然后手动调用接口#xff0c;或者通过JDK/CGLib动态…在我们的日常开发中经查会遇到调用接口失败的情况这时候就需要通过一些方法来进行重试比如通过while循环手动重复调用或或者通过记录错误接口url和参数到数据库然后手动调用接口或者通过JDK/CGLib动态代理的方式来进行重试但是这种方法比较笨重且对原有逻辑代码的入侵性比较大。
SpringRetry却可以通过注解在不入侵原有业务逻辑代码的方式下优雅的实现重处理功能。
1添加pom依赖 dependencygroupIdorg.springframework.retry/groupIdartifactIdspring-retry/artifactId/dependency2主启动类开启EnableRetry注解
/*** 主启动类* EnableCaching允许使用注解进行缓存* 添加注解EnableRetry* * author hua*/
EnableRetry
EnableCaching
SpringBootApplication
MapperScan(basePackages com.it.mapper)
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}3在重试所调用方法上添加Retryable注解
Service
Slf4j
public class SpringRetryService {/*** 重试所调用方法** delay2000L表示延迟2秒 multiplier2表示两倍 即第一次重试2秒后,第二次重试4秒后,第三次重试8秒后* return*/Retryable(value {RemoteAccessException.class}, maxAttempts 3, backoff Backoff(delay 2000L, multiplier 2))public boolean call(Integer param) {return retryMethod(param);}/*** 超过最大重试次数或抛出没有指定重试的异常* param e* param param* return*/Recoverpublic boolean recover(Exception e, Integer param) {log.info(请求参数为: , param);log.info(超过最大重试次数或抛出没有指定重试的异常, e {} , e.getMessage());return false;}public static boolean retryMethod(Integer param) {int i new Random().nextInt(param);log.info(随机生成的数:{}, i);if (1 i) {log.info(为1,返回true.);return true;} else if (i 1) {log.info(小于1,抛出参数异常.);throw new IllegalArgumentException(参数异常);} else if (i 1 i 10) {log.info(大于1,小于10,抛出参数异常.);return false;} else {//为其他log.info(大于10,抛出自定义异常.);throw new RemoteAccessException(大于10,抛出自定义异常);}}
}Spring Retry 注解属性详解 1、EnableRetry 作用于SpringbootApplication启动类开启spring retry。 proxyTargetClass默认值为false设置为true时为CGLIB代理。 2、Retryable 作用于需要进行重试的方法 value指定处理的异常类默认为空 include指定处理的异常类默认为空当include和exclude为空时默认所有异常 exclude指定哪些异常不处理默认空 maxAttempts最大重试次数。默认3次 backoff 重试补偿策略。默认使用Backoff注解 3、Backoff 作用于backoff中的补偿策略 delay指定等待时间没有设置的话默认为1000ms maxDelay最大重试时间没有设置默认为3000ms multiplier下一次调用时间的乘数 random随机等待时间默认值为false 4、Recover 用于对retry方法的异常抛出的特殊处理可做熔断、降级、日志等操作。入参必须和retry对应方法所抛出的异常类型相同。 4单元测试
SpringBootTest
Slf4j
public class SpringRetryServiceTest {Autowiredprivate SpringRetryService springRetryService;Testvoid contextLoads() {boolean result springRetryService.call(100);log.info(方法返回结果为: {}, result);}
}5测试结果 6:源码下载
下载地址 springboot-cacheable 欢迎star哦~
参考资料 Retryable注解优雅的实现循环重试功能 SpringRetryspring的重试机制——只需一个注解 Spring 中的重试机制简单、实用