回顧
我們前面學習了
更好的 java 重試框架 sisyphus 配置的 2 種方式介紹
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 開源地址
希望本文對你有所幫助,如果喜歡,歡迎點贊收藏轉發一波。
我是老馬,期待與你的下次重逢。