前言实际工作中,重新处理是很常见的场景,比如:发送消息失败。调用远程服务失败。争用锁失败。这些错误可能是网络波动造成的,等待重新处理会成功。一般来说,再处理都是使用try/catch、while循环等语法,但是这种方式缺乏统一性,也不是很方便,需要写很多代码。而spring-retry可以在不侵入原有业务逻辑代码的情况下,通过注解优雅的实现再处理功能。1.什么是@Retryable?spring系列的spring-retry是另一个实用程序模块,可帮助我们以标准方式处理任何特定操作的重试。在spring-retry中,所有的配置都是基于简单的注解。二、使用步骤1.POM依赖org.springframework.retryspring-retry2.启动@Retryable@EnableRetry@SpringBootApplicationpublicclassHelloApplication{publicstaticvoidmain(String[]args){SpringApplication.run(HelloApplication.class,args);}}3.在方法上添加@Retryableimportcom.mail.elegant.service.TestRetryService;importorg.springframework.retry.annotation.Backoff;importorg.springframework.retry.annotation.Retryable;importorg.springframework.stereotype.Service;导入java.time.LocalTime;@ServicepublicclassTestRetryServiceImplimplementsTestRetryService{@Override@Retryable(value=Exception.class,maxAttempts=3,backoff=@Backoff(delay=2000,multiplier=1.5))publicinttest(intcode)throwsException{System.out.println("测试被调用,时间:"+LocalTime.now());如果(代码==0){抛出新的异常(&"情况不对!");}System.out.println("测试被调用,情况正确!");返回200;}}简单解释一下注解中几个参数的含义:value:抛出指定的异常重试include:同value,默认为空,当exclude也为空时,默认所有异常exclude:指定异常不被handledmaxAttempts:最大重试次数,默认3次multiplier(指定延迟倍数)默认为0,表示固定暂停1秒,然后重试。如果倍数设置为1.5,第一次重试2秒,第二次重试3秒,第三次4.5秒。当重试耗尽时,仍然失败。会发生什么?当重试耗尽时,RetryOperations可以将控制权传递给另一个回调RecoveryCallback。Spring-Retry也为@Retryable重试失败后处理方法提供了@Recover注解。如果不需要回调方法,可以不直接写回调方法,那么实现的效果就是重试次数结束后,如果还是不成功,不符合业务判断,抛出异常抛出。4.@Recover@Recoverpublicintrecover(Exceptione,intcode){System.out.println("回调方法执行完毕!!!!");//记录日志到数据库或者调用其他方法return400;}可以看到传入的参数中写了Exceptione,就是回调的连接代码(重试次数用完了,还是失败,我们抛出这个Exceptione通知来触发回调方法)。对于@Recover注解的方法,要特别注意:方法的返回值必须和@Retryable方法保持一致。该方法的第一个参数必须是Throwable类型。建议与@Retryable配置的异常保持一致。其他参数,需要哪个参数,写在(@Recover方法中)即可。回调方法和重试方法写在同一个实现类中。5.注意事项由于是基于AOP实现,所以不支持类中的自调用方法。如果重试失败,需要对@Recover注解的方法做后续处理。那么重试方法不能有返回值。它只能在void方法中使用trycatch,只能抛出一个异常@Recover注解来开启失败重试。要调用的方法(注意必须和再处理方法在同一个类),这个注解所注解的方法参数必须是@Retryable抛出的异常,否则无法识别,日志处理可以在这个方法。小结本文主要简单介绍了Springboot中Retryable的使用,主要适用场景及注意事项,在需要重试的时候还是很有用的。来源:blog.csdn.net/h254931252/article/details/109257998