我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java 重试框架 Sisyphus 配置的两种方式

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java 重试框架 Sisyphus 配置的两种方式

1、函数式配置概览

为了满足更加方便的配置,Retryer 类提供了许多可以配置的信息。

1.1 默认配置


 
public void defaultConfigTest() { 
    Retryer.<String>newInstance() 
            .condition(RetryConditions.hasExceptionCause()) 
            .retryWaitContext(RetryWaiter.<String>retryWait(NoRetryWait.class).context()) 
            .maxAttempt(3) 
            .listen(RetryListens.noListen()) 
            .recover(Recovers.noRecover()) 
            .callable(new Callable<String>() { 
                @Override 
                public String call() throws Exception { 
                    System.out.println("called..."); 
                    throw new RuntimeException(); 
                } 
            }).retryCall(); 
} 

和下面的代码是等价的:


public void helloTest() { 
    Retryer.<String>newInstance() 
            .callable(new Callable<String>() { 
                @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 引入


<dependency> 
    <groupId>${project.groupId}</groupId> 
    <artifactId>sisyphus-annotation</artifactId> 
    <version>${project.version}</version> 
</dependency> 

注解:

核心注解主要有两个。

4.2 Retry

用于指定重试的相关配置。


 
@Documented 
@Inherited 
@Target(ElementType.METHOD) 
@Retention(RetentionPolicy.RUNTIME) 
@RetryAble(DefaultRetryAbleHandler.class) 
public @interface Retry { 
 
     
    Class<? extends com.github.houbb.sisyphus.api.core.Retry> retry() default DefaultRetry.class; 
 
     
    int maxAttempt() default 3; 
 
     
    Class<? extends RetryCondition> condition() default ExceptionCauseRetryCondition.class; 
 
     
    Class<? extends RetryListen> listen() default NoRetryListen.class; 
 
     
    Class<? extends Recover> recover() default NoRecover.class; 
 
     
    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.*; 
 
 
@Retention(RetentionPolicy.RUNTIME) 
@Inherited 
@Documented 
@Target(ElementType.ANNOTATION_TYPE) 
@RetryWaitAble(DefaultRetryWaitAbleHandler.class) 
public @interface RetryWait { 
 
     
    long value() default RetryWaitConst.VALUE_MILLS; 
 
     
    long min() default RetryWaitConst.MIN_MILLS; 
 
     
    long max() default RetryWaitConst.MAX_MILLS; 
 
     
    double factor() default Double.MIN_VALUE; 
 
     
    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 配置的两种方式的文章就介绍到这了,更多相关Java 重试框架 Sisyphus 配置方式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java 重试框架 Sisyphus 配置的两种方式

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java重试框架Sisyphus配置的方式有哪些

本篇内容主要讲解“Java重试框架Sisyphus配置的方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java重试框架Sisyphus配置的方式有哪些”吧!1、函数式配置概览为了满足更
2023-06-25

java框架中spring aop两种配置方式分别是什么

这篇文章给大家介绍java框架中spring aop两种配置方式分别是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。注解配置AOP注解配置AOP(使用 AspectJ 类库实现的),大致分为三步: 1. 使用注解@
2023-06-17

单元测试框架Jest搭配TypeScript的安装与配置方式

这篇文章主要介绍了单元测试框架Jest搭配TypeScript的安装与配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-28

Vue脚手架配置代理服务器的两种方式(小结)

本文主要介绍了Vue脚手架配置代理服务器的两种方式(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-08

mybatis 加载配置文件的方法(两种方式)

一. 使用sqlSessionFactory 的 mapperLocations 进行加载, 2023-05-30

Mybatis-plus多数据源配置的两种方式总结

这篇文章主要为大家详细介绍了Mybatis-plus中多数据源配置的两种方式,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起了解一下
2022-11-13

java中Socket设置超时时间的两种方式

这篇文章主要介绍了java中Socket设置超时时间的两种方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-13

Docker部署Nginx并修改配置文件的两种方式

这篇文章主要给大家介绍了关于Docker部署Nginx并修改配置文件的两种方式,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
2023-01-28

Java读取Properties配置文件的6种方式

Java读取Properties的方式 项目结构:经典的maven项目结构 配置文件1和2内容一致: jdbc.driver=com.mysql.cj.jdbc.Driverjdbc.url=mysql://localhost:3306/
2023-08-16

深入浅出Java中重试机制的多种方式

重试机制在分布式系统中,或者调用外部接口中,都是十分重要的。重试机制可以保护系统减少因网络波动、依赖服务短暂性不可用带来的影响,让系统能更稳定的运行的一种保护机制。本文就来和大家聊聊Java中重试机制的多种方式
2023-03-14

详解Spring-boot中读取config配置文件的两种方式

了解过spring-Boot这个技术的,应该知道Spring-Boot的核心配置文件application.properties,当然也可以通过注解自定义配置文件的信息。Spring-Boot读取配置文件的方式:一.读取核心配置文件信息ap
2023-05-31

Go语言读取YAML配置文件的两种方式分享

在日常开发中,YAML格式的文件基本上被默认为是配置文件,其内容因为缩进带来的层级感看起来非常直观和整洁。本文分享了读取YAML配置文件的两种方式,需要的可以参考一下
2022-12-19

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录