Java重试框架Sisyphus配置的方式有哪些
发表于:2025-02-24 作者:千家信息网编辑
千家信息网最后更新 2025年02月24日,本篇内容主要讲解"Java重试框架Sisyphus配置的方式有哪些",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Java重试框架Sisyphus配置的方式
千家信息网最后更新 2025年02月24日Java重试框架Sisyphus配置的方式有哪些
本篇内容主要讲解"Java重试框架Sisyphus配置的方式有哪些",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Java重试框架Sisyphus配置的方式有哪些"吧!
1、函数式配置概览
为了满足更加方便的配置,Retryer
类提供了许多可以配置的信息。
1.1 默认配置
/** * 默认配置测试 */ public void defaultConfigTest() { Retryer.newInstance() .condition(RetryConditions.hasExceptionCause()) .retryWaitContext(RetryWaiter. retryWait(NoRetryWait.class).context()) .maxAttempt(3) .listen(RetryListens.noListen()) .recover(Recovers.noRecover()) .callable(new Callable () { @Override public String call() throws Exception { System.out.println("called..."); throw new RuntimeException(); } }).retryCall(); }
和下面的代码是等价的:
public void helloTest() { Retryer.newInstance() .callable(new Callable () { @Override public String call() throws Exception { System.out.println("called..."); throw new RuntimeException(); } }).retryCall(); }
2、方法说明
2.1 condition
重试触发的条件,可以指定多个条件。
默认为抛出异常。
2.2 retryWaitContext
重试等待的策略,可以指定多个。
默认为不做任何等待。
2.3 maxAttempt
指定最大重试次数,包括第一次执行。
默认值:3 次。
2.4 listen
指定重试的监听实现,默认为不做监听。
2.5 recover
当重试完成之后,依然满足重试条件,则可以指定恢复的策略。
默认不做恢复。
2.6 callable
待重试执行的方法。
2.7 retryCall
触发重试执行。
3、接口的详细介绍
3.1 接口及其实现
所有的接口,都可以直接查看对应的子类实例。
3.2 用户自定义
基于替换的灵活性,用户可以实现接口,定义更符合自己业务的实现。
3.3 sisyphus 注解
配置具有很高的灵活性,但是对于开发人员的使用,就没有注解那样简单灵活。
所以本框架也实现了基于注解的重试。
4、设计的规范
保证接口和注解二者的统一性。
4.1 maven 引入
${project.groupId} sisyphus-annotation ${project.version}
注解:
核心注解主要有两个。
4.2 Retry
用于指定重试的相关配置。
/** * 重试注解 * 1. 实际需要,只允许放在方法上。 * 2. 如果放在接口上,是否所有的子类都生效?为了简单明确,不提供这种实现。 * 3. 保持注解和接口的一致性。{@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; /** * 最大尝试次数 * 1. 包含方法第一次正常执行的次数 * @return 次数 */ int maxAttempt() default 3; /** * 重试触发的场景 * @return 重试触发的场景 */ Class extends RetryCondition> condition() default ExceptionCauseRetryCondition.class; /** * 监听器 * 1. 默认不进行监听 * @return 监听器 */ Class extends RetryListen> listen() default NoRetryListen.class; /** * 恢复操作 * 1. 默认不进行任何恢复操作 * @return 恢复操作对应的类 */ Class extends Recover> recover() default NoRecover.class; /** * 等待策略 * 1. 支持指定多个,如果不指定,则不进行任何等待, * @return 等待策略 */ RetryWait[] waits() default {}; }
4.3 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.*; /** * 重试等待策略 * 1. 为了对应重试策略,所有的内置注解应该实现当前的注解。 * 2. 是否允许自定义注解? * * 当注解+对象同时出现的时候,视为组合。 * * @author binbin.hou * @since 0.0.3 */ @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented @Target(ElementType.ANNOTATION_TYPE) @RetryWaitAble(DefaultRetryWaitAbleHandler.class) public @interface RetryWait { /** * 默认值 * 1. fixed 模式,则对应固定等待时间 * 2. 递增 * @return 默认值 */ long value() default RetryWaitConst.VALUE_MILLS; /** * 最小值 * @return 最小值 */ long min() default RetryWaitConst.MIN_MILLS; /** * 最大值 * @return 最大值 */ long max() default RetryWaitConst.MAX_MILLS; /** * 影响因数 * 1. 递增重试,默认为 {@link RetryWaitConst#INCREASE_MILLS_FACTOR} * 2. 指数模式。默认为 {@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; }
5、注解的使用
定义好了注解,肯定要有注解的相关使用。
关于注解的使用,主要有两种方式。
5.1 Proxy+CGLIB
基于代理模式和字节码增强。
如果是项目中没有使用 spring
,直接使用这种方式比较方便。
5.2 Spring-AOP
可以和 spring
直接整合。
使用方式和 spring-retry
是一样的。
这些内容将放在下一节进行详细讲解。
到此,相信大家对"Java重试框架Sisyphus配置的方式有哪些"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
注解
配置
接口
策略
方式
方法
监听
框架
最大
次数
内容
多个
时间
条件
模式
最小
信息
因数
场景
子类
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
铜仁软件开发招聘
蓝月传奇服务器排名
服务器rss值是什么意思啊
寰宇互联服务器
网络安全管理是网警吗
浙江数据网络技术服务推广
泉州企业财务软件开发
蔡瑞霖 软件开发
台江区阿斌网络技术服务部
数据库查询值不等于空的语句
我的世界手机版服务器生存建基地
什么软件可以做服务器
p2p服务器端
直播软件开发需要什么资质
服务器内存槽位A1A2怎么分
百万答题软件开发
最近的软件开发培训班
人脸识别考勤软件开发
如何解决csgo连接任意服务器
网络安全动态防御
在数据库查询某条数据
数据库范式视频教程
邛崃软件开发项目管理
需求等级网络安全
万山天气预报软件开发
算丰服务器
长沙开福区软件开发培训哪家好
mc遗忘之地服务器
数据库培训扩展情况
汽车软件开发测试工程师培训