Spring Retry 重试( 三 )


@Configuration@EnableRetrypublic class Application {@Beanpublic Service service() {return new Service();}@Bean public RetryListener retryListener1() {return new RetryListener() {...}}@Bean public RetryListener retryListener2() {return new RetryListener() {...}}}@Serviceclass Service {@Retryable(RemoteAccessException.class)public service() {// ... do something}}可以使用 @Retryable 的属性类控制 RetryPolicy 和 BackoffPolicy
@Serviceclass Service {@Retryable(maxAttempts=12, backoff=@Backoff(delay=100, maxDelay=500))public service() {// ... do something}}如果希望在重试用尽时采用替代代码返回,则可以提供恢复方法 。方法应该声明在与@Retryable实例相同的类中,并标记为@Recover 。返回类型必须匹配@Retryable方法 。恢复方法的参数可以包括抛出的异常和(可选地)传递给原始可重试方法的参数(或者它们的部分列表,只要在需要的最后一个之前不省略任何参数) 。
@Serviceclass Service {@Retryable(RemoteAccessException.class)public void service(String str1, String str2) {// ... do something}@Recoverpublic void recover(RemoteAccessException e, String str1, String str2) {// ... error handling making use of original args if required}}若要解决可选择用于恢复的多个方法之间的冲突,可以显式指定恢复方法名称 。
@Serviceclass Service {@Retryable(recover = "service1Recover", value = https://www.huyubaike.com/biancheng/RemoteAccessException.class)public void service1(String str1, String str2) {// ... do something}@Retryable(recover ="service2Recover", value = https://www.huyubaike.com/biancheng/RemoteAccessException.class)public void service2(String str1, String str2) {// ... do something}@Recoverpublic void service1Recover(RemoteAccessException e, String str1, String str2) {// ... error handling making use of original args if required}@Recoverpublic void service2Recover(RemoteAccessException e, String str1, String str2) {// ... error handling making use of original args if required}}https://github.com/spring-projects/spring-retry
【Spring Retry 重试】

经验总结扩展阅读