Spring-Retry 1.3.4 分析
关键变量
- BackOffPolicy 执行失败处理
- RetryPolicy 判断能否重试
- RetryListener 执行监听
执行方法
execute
参数
- retryCallback 执行方法
- recoveryCallback 重试上限后执行方法
执行步骤
- RetryPolicy.open 创建RetryContext
- RetrySynchronizationManager.register(context) 当前线程存储RetryContext
- doOpenInterceptors 遍历执行 RetryListener.open
- 判断
backOffContext
是否在context里面,FALSE:执行backOffPolicy.start
必须抛出异常才能进入重试
- retryPolicy.canRetry && !context.isExhaustedOnly(
判断执行是否结束
)
进入异常处理
- registerThrowable 放入异常
- doOnErrorInterceptors 遍历执行 RetryListener.onError
- 判断一次步骤
5
- backOffPolicy.backOff 执行,进行
sleep
等操作 - shouldRethrow 执行,
state
非空则执行回滚,并抛出异常
重试超过限制,退出while
- handleRetryExhausted 执行,recoveryCallback.recover
finally
- retryPolicy.close
- RetryListener.close
- RetrySynchronizationManager.clear 清理当前线程存储RetryContext