文章目录
- Listener - 监听器
- 自定义注解
- 相关博文
👀 上节回顾:详细了解重试策略及重试间隔策略。
👉 本节目标:进阶使用,比如 listener 或自定义注解。
Listener - 监听器
Spring-Retry,提供了监听器,可以实现对所有 Retry 的监听机制:
public interface RetryListener {// 第一次重试前default <T, E extends Throwable> boolean open(RetryContext context, RetryCallback<T, E> callback) {return true;}// 成功重试后,允许基于 RetryCallback.doWithRetry(RetryContext) 的结果继续抛出一次,从而根据重试策略继续重试default <T, E extends Throwable> void onSuccess(RetryContext context, RetryCallback<T, E> callback, T result) {}// 重试出错后default <T, E extends Throwable> void onError(RetryContext context, RetryCallback<T, E> callback,Throwable throwable) {}// 最后一次重试后(不管成功与否)default <T, E extends Throwable> void close(RetryContext context, RetryCallback<T, E> callback,Throwable throwable) {}}
配置方式:
- 实现 RetryListener 接口,并注册为 Spring Bean
- 在 @Retryable 注解上使用 listeners 指定 listener 的 bean 名称
注意:如果配置了多个监听器,则会按顺序来走。open 的顺序是一样的,onSuccess、onError、close 则是按反序调用的。
RetryListener 的实现类:
- StatisticsListener:记录重试统计信息,包括完成重试次数、重试出错次数、进入 recovery 次数等
- MethodInvocationRetryListenerSupport:针对 MethodInvocationRetryCallback,提供缺省实现,比如 doClose 缺省实现
template.registerListener