默认不做恢复。
callable
待重试执行的方法。
retryCall
触发重试执行。
接口的详细介绍
=======
接口及其实现
所有的接口,都可以直接查看对应的子类实例。
用户自定义
基于替换的灵活性,用户可以实现接口,定义更符合自己业务的实现。
sisyphus 注解
===========
配置具有很高的灵活性,但是对于开发人员的使用,就没有注解那样简单灵活。
所以本框架也实现了基于注解的重试。
设计的规范
保证接口和注解二者的统一性。
maven 引入
${project.groupId}
sisyphus-annotation
${project.version}
复制代码
注解
==
核心注解主要有两个。
Retry
用于指定重试的相关配置。
/**
-
重试注解
-
- 实际需要,只允许放在方法上。
-
- 如果放在接口上,是否所有的子类都生效?为了简单明确,不提供这种实现。
-
- 保持注解和接口的一致性。{@link com.github.houbb.sisyphus.api.core.Retry} 接口
-
@author binbin.hou
-
@since 0.0.3
*/
@Documented
@Inherited
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@RetryAble(DefaultRetryAbleHandler.class)
public @interface Retry {
/**
-
重试类实现
-
@return 重试
-
@since 0.0.5
*/
Class<? extends com.github.houbb.sisyphus.api.core.Retry> retry() default DefaultRetry.class;
/**
-
最大尝试次数
-
- 包含方法第一次正常执行的次数
-
@return 次数
*/
int maxAttempt() default 3;
/**
-
重试触发的场景
-
@return 重试触发的场景
*/
Class<? extends RetryCondition> condition() default ExceptionCauseRetryCondition.class;
/**
-
监听器
-
- 默认不进行监听
-
@return 监听器
*/
Class<? extends RetryListen> listen() default NoRetryListen.class;
/**
-
恢复操作
-
- 默认不进行任何恢复操作
-
@return 恢复操作对应的类
*/
Class<? extends Recover> recover() default NoRecover.class;
/**
-
等待策略
-
- 支持指定多个,如果不指定,则不进行任何等待,
-
@return 等待策略
*/
RetryWait[] waits() default {};
}
复制代码
RetryWait
用于指定重试的等待策略。
package com.github.houbb.sisyphus.annotation.annotation;
import com.github.houbb.sisyphus.annotation.annotation.metadata.RetryWaitAble;
import com.github.houbb.sisyphus.annotation.handler.impl.DefaultRetryWaitAbleHandler;
import com.github.houbb.sisyphus.core.constant.RetryWaitConst;
import com.github.houbb.sisyphus.core.support.wait.NoRetryWait;
import java.lang.annotation.*;
/**
-
重试等待策略
-
- 为了对应重试策略,所有的内置注解应该实现当前的注解。
-
- 是否允许自定义注解?
-
当注解+对象同时出现的时候,视为组合。
-
@author binbin.hou
-
@since 0.0.3
*/
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Target(ElementType.ANNOTATION_TYPE)
@RetryWaitAble(DefaultRetryWaitAbleHandler.class)
public @interface RetryWait {
/**
-
默认值
-
- fixed 模式,则对应固定等待时间
-
- 递增
-
@return 默认值
*/
long value() default RetryWaitConst.VALUE_MILLS;
/**
-
最小值
-
@return 最小值
*/
long min() default RetryWaitConst.MIN_MILLS;
/**
-
最大值
-
@return 最大值
*/
long max() default RetryWaitConst.MAX_MILLS;
/**
-
影响因数
-
- 递增重试,默认为 {@link RetryWaitConst#INCREASE_MILLS_FACTOR}
-
- 指数模式。默认为 {@link RetryWaitConst#MULTIPLY_FACTOR}
-
@return 影响因数
*/
double factor() default Double.MIN_VALUE;
/**
-
指定重试的等待时间 class 信息
-
@return 重试等待时间 class
*/
Class<? extends com.github.houbb.sisyphus.api.support.wait.RetryWait> retryWait() default NoRetryWait.class;
}
复制代码
注解的使用
=====
定义好了注解,肯定要有注解的相关使用。
关于注解的使用,主要有两种方式。
Proxy+CGLIB
基于代理模式和字节码增强。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://img-blog.csdnimg.cn/img_convert/d42240ace8d7fc136a0d414badd80d1b.jpeg)
学习分享,共勉
这里是小编拿到的学习资源,其中包括“中高级Java开发面试高频考点题笔记300道.pdf”和“Java核心知识体系笔记.pdf”文件分享,内容丰富,囊括了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。同时还有Java进阶学习的知识笔记脑图(内含大量学习笔记)!
资料整理不易,读者朋友可以转发分享下!
Java核心知识体系笔记.pdf
中高级Java开发面试高频考点题笔记300道.pdf
架构进阶面试专题及架构学习笔记脑图
Java架构进阶学习视频分享
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
keeper、数据库、数据结构等大量知识点。同时还有Java进阶学习的知识笔记脑图(内含大量学习笔记)!**
资料整理不易,读者朋友可以转发分享下!
Java核心知识体系笔记.pdf
[外链图片转存中…(img-vfEVbL27-1713730149167)]
中高级Java开发面试高频考点题笔记300道.pdf
[外链图片转存中…(img-TjSxMTeB-1713730149167)]
架构进阶面试专题及架构学习笔记脑图
[外链图片转存中…(img-NVcLqhU2-1713730149168)]
Java架构进阶学习视频分享
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!