回顾

我们前面学习了

更好的 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();}@Retrypublic 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@Retrypublic 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 {@Autowiredprivate 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@Retrypublic String query() {System.out.println("spring service query...");throw new RuntimeException();}}

测试代码

  • SisyphusApplicationTest.java
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SisyphusApplication.class)
public class SisyphusApplicationTest {@Autowiredprivate 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. spring框架xml的几种配置方式

    spring框架xml的几种配置方式 ioc配置一般由一下两大类 1 手动装配 利用xml手动配置,分为:setter方法装配 ,构造器装配 2 自动装配 利用注解自动装配 准备工作:userdao ...

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

    Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...

  3. java线程的任务的三种创建方式,严格地说,就一种,就是如何重写Runnable接口的run()方法

    仅简单演示Java中线程任务的三种创建方式 第一种:使用了适配器模式,有返回值,能抛出异常,任务代码写在Callable.call()方法中,Runnable的run方法会通过适配器调用到Callab ...

  4. java foreach hashmap_在 Java 中遍历 HashMap 的5种最佳方式

    在本文中,我们将通过示例讨论在 Java 上遍历  HashMap  的五种最佳方式. 使用  Iterator  遍历 HashMap EntrySet 使用  Iterator  遍历 HashM ...

  5. Java本地高性能缓存的几种实现方式

    Java缓存技术可分为远端缓存和本地缓存,远端缓存常用的方案有著名的redis和memcache,而本地缓存的代表技术主要有HashMap,Guava Cache,Caffeine和Encahche. ...

  6. java中字符串的创建_【转载】 Java中String类型的两种创建方式

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

  7. java servlet接口开发_servlet三种实现方式之一实现servlet接口

    servlet有三种实现方式: 1.实现servlet接口 2.继承GenericServlet 3.通过继承HttpServlet开发servlet 第一种示例代码如下(已去掉包名): import ...

  8. java中List集合的几种遍历方式

    本文中我们给出了List集合中的四种遍历方式,分别是for循环,迭代器循环,代码及相应的注释如下: package d1_collection;import java.util.*;public cl ...

  9. Java中匿名类的两种实现方式

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

  10. 四:Java+SpringBoot框架使用(两种携带参数的get接口开发)

    get请求携带参数一般有两种方式:第一种是url?key1=value1&key2=value2,第二种是url/value1/value2,所以两种方式分开来讲 1.url?key1=val ...

最新文章

  1. 如何进行软件测试需求分析
  2. uwsgi xml 配置
  3. windows内存结构概述
  4. 云专网和云专线的区别_传统IDC行业与云计算的区别?
  5. Spring Boot Serverless 实战系列“架构篇” 首发 | 光速入门函数计算
  6. php生成 优惠券 激活码
  7. BZOJ 1041 圆上的整点 数学
  8. hdu 1811 Rank of Tetris 并查集+拓扑排序
  9. 计算机理工 教学计划,教学计划格式-华南理工大学计算机科学与工程学院.DOC
  10. java linq select_Java 8是否还需要LINQ?还是已经比LINQ 更好?
  11. js判断是否是数组的几种方法
  12. hbase数据库scan操作_HBase Scan 使用
  13. 读书笔记---Naive Bayes
  14. 【TypeScript】JSX 元素隐式具有类型 “any“,因为不存在接口 “JSX.IntrinsicElements“。ts(7026)
  15. 一个HashMap对象所占内存的分析
  16. 偏度与峰度(附python代码)
  17. 服务异步通信RabbitMQ
  18. 高级软件工程第九次作业:东理三剑客团队作业-随笔6
  19. Android端手机测试体系
  20. Java反射获取构造方法

热门文章

  1. SC2Rank 星际2天梯排行榜 SpringMVC + Spring + Mybatis + Mysql + Maven java web项目
  2. 机器学习 | 吴恩达斯坦福课程笔记整理之(二)逻辑回归
  3. 自助破解winrar
  4. HTML+CSS案例京东静态界面
  5. HCL_路由器_三层交换
  6. 如何简单又好看地美化你的Ubuntu界面
  7. Win10 通知区域蓝牙图标消失问题
  8. 2022 我勇敢地走过
  9. 【Java8新特性】Stream流
  10. 多传感器融合的四种经典结构