回顾

我们前面学习了

更好的 java 重试框架 sisyphus 入门简介

更好的 java 重试框架 sisyphus 配置的 2 种方式介绍

更好的 java 重试框架 sisyphus 背后的故事

java 重试框架 sisyphus 开源地址

这一节让我们一起学习下 sisyphus 的 3 种使用方式。

sisyphus 代理模板

目的

为了便于用户更加方便地使用注解,同时又不依赖 spring。

提供基于代码模式+字节码增强实现的方式。

使用案例

maven 引入

引入注解相关模块。

<dependency>
<groupId>com.github.houbb</groupId>
<artifactId>sisyphus-annotation</artifactId>
<version>0.0.9</version>
</dependency>

定义测试方法

以下测试代码可以参考 spring-test 模块。

  • MenuServiceImpl.java
public class MenuServiceImpl {

    public void queryMenu(long id) {
System.out.println("查询菜单...");
throw new RuntimeException();
} @Retry
public void queryMenuRetry(long id) {
System.out.println("查询菜单...");
throw new RuntimeException();
} }

测试

使用 RetryTemplate 进行测试

无重试注解的方法

@Test(expected = RuntimeException.class)
public void templateTest() {
MenuServiceImpl menuService = RetryTemplate.getProxyObject(new MenuServiceImpl());
menuService.queryMenu(1);
}
  • 日志信息
查询菜单...

只请求了一次。

有注解的方法

@Test(expected = RuntimeException.class)
public void templateRetryTest() {
MenuServiceImpl menuService = RetryTemplate.getProxyObject(new MenuServiceImpl());
menuService.queryMenuRetry(1);
}
  • 日志信息
查询菜单...
查询菜单...
查询菜单...

sisyphus spring 整合

目的

类似于 spring-retry 框架,如果你使用 spring 框架,那么整合本项目将会非常简单。

注解的方式和过程式编程,二者尽可能的保持一致性,你想从一种方式变为另一种也比较简单。

想从 spring-retry 切换到本框架也很方便。

maven 引入

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

会默认引入 spring 以及 AOP 相关 jar。

业务代码

你可以参考 sisyphus-test 模块。

下面模拟非常常见的一些业务方法。

使用 @Retry 标识方法需要进行重试。

  • SpringService.java
public interface SpringService {

    /**
* 查询示例代码
* @return 结果
*/
String query(); }
  • SpringServiceImpl.java
import com.github.houbb.sisyphus.annotation.annotation.Retry;
import com.github.houbb.sisyphus.test.service.SpringService;
import org.springframework.stereotype.Service; /**
* @author binbin.hou
* @since 0.0.4
*/
@Service
public class SpringServiceImpl implements SpringService { @Override
@Retry
public String query() {
System.out.println("spring service query...");
throw new RuntimeException();
} }

开启重试

基于注解直接如下配置即可。

使用 @EnableRetry 标识需要开启重试。

@Configurable
@ComponentScan(basePackages = "com.github.houbb.sisyphus.test.service")
@EnableRetry
public class SpringConfig {
}

测试代码

import com.github.houbb.sisyphus.test.config.SpringConfig;
import com.github.houbb.sisyphus.test.service.SpringService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /**
* @author binbin.hou
* @since 0.0.4
*/
@ContextConfiguration(classes = SpringConfig.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class SpringServiceTest { @Autowired
private SpringService springService; @Test(expected = RuntimeException.class)
public void queryTest() {
springService.query();
} }
  • 日志信息
spring service query...
spring service query...
spring service query...

sisyphus springboot 整合

目的

类似于 spring-retry 框架,如果你使用 springboot 框架,那么整合本项目将会非常简单。

注解的方式和过程式编程,二者尽可能的保持一致性,你想从一种方式变为另一种也比较简单。

想从 spring-retry 切换到本框架也很方便。

整体与 spring 整合类似,而且更加简单。

maven 引入

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

会默认引入 springboot 整合相关的依赖。

业务代码

你可以参考 sisyphus-test springboot 测试模块。

下面模拟非常常见的一些业务方法。

使用 @Retry 标识方法需要进行重试。

  • SpringService.java
public interface SpringService {

    /**
* 查询示例代码
* @return 结果
*/
String query(); }
  • SpringServiceImpl.java
import com.github.houbb.sisyphus.annotation.annotation.Retry;
import com.github.houbb.sisyphus.test.service.SpringService;
import org.springframework.stereotype.Service; /**
* @author binbin.hou
* @since 0.0.4
*/
@Service
public class SpringServiceImpl implements SpringService { @Override
@Retry
public String query() {
System.out.println("spring service query...");
throw new RuntimeException();
} }

测试代码

  • SisyphusApplicationTest.java
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SisyphusApplication.class)
public class SisyphusApplicationTest { @Autowired
private SpringService springService; @Test(expected = RuntimeException.class)
public void queryTest() {
springService.query();
} }

其中 SisyphusApplication.java 代码如下:

就是最基本的 springboot 启动入口。

@SpringBootApplication
@ComponentScan(basePackages = "com.github.houbb.sisyphus.test.service")
public class SisyphusApplication { public static void main(String[] args) {
SpringApplication.run(SisyphusApplication.class, args);
} }
  • 日志信息
spring service query...
spring service query...
spring service query...

小结

3 种使用方式基本可以满足日常开发中的各种场景。

java 重试框架 sisyphus 开源地址

希望本文对你有所帮助,如果喜欢,欢迎点赞收藏转发一波。

我是老马,期待与你的下次重逢。

更好的 java 重试框架 sisyphus 的 3 种使用方式的更多相关文章

  1. 更好的 java 重试框架 sisyphus 配置的 2 种方式介绍

    回顾 我们前面学习了 更好的 java 重试框架 sisyphus 入门简介 更好的 java 重试框架 sisyphus 背后的故事 这一节让我们一起学习下 sisyphus 基于函数式的配置和注解 ...

  2. 更好的 java 重试框架 sisyphus 背后的故事

    sisyphus 综合了 spring-retry 和 gauva-retrying 的优势,使用起来也非常灵活. 今天,让我们一起看一下西西弗斯背后的故事. 情景导入 简单的需求 产品经理:实现一个 ...

  3. 更好的 java 重试框架 sisyphus 入门简介

    What is Sisyphus sisyphus 综合了 spring-retry 和 gauva-retrying 的优势,使用起来也非常灵活. 为什么选择这个名字 我觉得重试做的事情和西西弗斯很 ...

  4. Java使用SFTP和FTP两种连接方式实现对服务器的上传下载 【我改】

    []如何区分是需要使用SFTP还是FTP? []我觉得: 1.看是否已知私钥. SFTP 和 FTP 最主要的区别就是 SFTP 有私钥,也就是在创建连接对象时,SFTP 除了用户名和密码外还需要知道 ...

  5. Java连接Oracle数据库的三种连接方式

    背景: 这两天在学习Oracle数据库,这里就总结下自己上课所学的知识,同时记录下来,方便整理当天所学下的知识,也同时方便日后自己查询. SQL语句的话,这里我就不多讲了,感觉和其他的数据库(MySQ ...

  6. Java中Map集合的四种访问方式(转)

    最近学习Java发现集合类型真是很多,访问方式也很灵活,在网上找的方法,先放下备用 public static void main(String[] args) { Map<String, St ...

  7. Java中匿名类的两种实现方式(转)

    使用匿名内部类课使代码更加简洁.紧凑,模块化程度更高.内部类能够访问外部内的一切成员变量和方法,包括私有的,而实现接口或继承类做不到.然而这个不是我说的重点,我说的很简单,就是匿名内部类的两种实现方式 ...

  8. Java中List集合的三种遍历方式(全网最详)

    List集合在Java日常开发中是必不可少的,只要懂得运用各种各样的方法就可以大大提高我们开发的效率,适当活用各种方法才会使我们开发事半功倍. 我总结了三种List集合的遍历方式,下面一一来介绍. 首 ...

  9. 【转载】 Java中String类型的两种创建方式

    本文转载自 https://www.cnblogs.com/fguozhu/articles/2661055.html Java中String是一个特殊的包装类数据有两种创建形式: String s ...

随机推荐

  1. 前后端数据交互(三)——ajax 封装及调用

    有很多框架已经将 ajax 封装,需要的时候只需要调用就好,比如 jquery 是最常用的.我们为什么还需要学习 ajax 的封装呢?首先加强我们对ajax的认识,其次如果只是因为ajax请求需要引入 ...

  2. Sentry Web 性能监控 - Trends

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...

  3. python库--pandas--写入文本文件

    pandas.DataFrame.to_csv 参数 说明 path_or_buf=None 文件路径或对象, 若果为None, 则结果作为字符串返回 sep=',' 分隔符 na_rep='' 缺失 ...

  4. Docker 安装 MySQL5.6

    方法一.docker pull mysql查找Docker Hub上的mysql镜像 #docker search mysql 这里我们拉取官方的镜像,标签为5.6 #docker pull mysq ...

  5. EditPlus配置C/C++运行环境

    1.安装MinGW和EditPlus 2.打开EditPlus ctrl+1 编译 ctrl+2 运行

  6. Jwt的新手入门教程

    Jwt的新手入门教程 1.Jwt究竟是什么东东? ​ 先贴官网地址:JSON Web Tokens - jwt.io ​ ​ 再贴官方的定义: What is JSON Web Token? JSON ...

  7. webpack learn1-配置项目加载各种静态资源及css预处理器2

    继续在webpack.config.js中配置loader { test:/\.css$/, use: [ 'style-loader', 'css-loader' ] },{ test:/\.(jp ...

  8. Linux系列(3) - ls

    作用 ls:查询目录中内容 格式 ls [选项] [文件或目录] 选项 描述 -a 显示所有文件,包括隐藏文件.隐藏文件是.开头的 -l 显示详细信息:ls -l简写为ll,使用频率很高 -d 查看目 ...

  9. redis的持久化 与事务管理

    1. redis的持久化 Redis的持久化主要分为两部分:RDB(Redis DataBase), AOF(Append Only File) 2. 什么是redis 的持久化        在指定 ...

  10. Composer基础

    摘要 本文介绍Composer的入门知识,包括require和autoload部分. Java有Maven, Node.js有npm, ROR有gem, 这些语言的程序员在开心地使用包管理工具加速开发 ...