<dependency>
<groupId>com.github.rholder</groupId>
<artifactId>guava-retrying</artifactId>
<version>2.0.0</version>
</dependency>
package com.hhwy.demo.test; import com.github.rholder.retry.Retryer; import com.github.rholder.retry.RetryerBuilder; import com.github.rholder.retry.StopStrategies; public class Test { private int invokeCount = 0; @org.junit.Test public void guavaRetryTest() { Retryer<Integer> retryer = RetryerBuilder.<Integer>newBuilder() // 非正數進行重試 .retryIfRuntimeException() // 偶數則進行重試 .retryIfResult(result -> result % 2 == 0) // 設置最大執行次數3次 .withStopStrategy(StopStrategies.stopAfterAttempt(3)).build(); try { invokeCount=0; retryer.call(() -> realAction(0)); } catch (Exception e) { System.out.println("執行0,異常:" + e.getMessage()); } try { invokeCount=0; retryer.call(() -> realAction(1)); } catch (Exception e) { System.out.println("執行1,異常:" + e.getMessage()); } try { invokeCount=0; retryer.call(() -> realAction(2)); } catch (Exception e) { System.out.println("執行2,異常:" + e.getMessage()); } } public int realAction(int num) { invokeCount++; System.out.println(String.format("當前執行第 %d 次,num:%d", invokeCount, num)); if (num <= 0) { throw new IllegalArgumentException(); } return num; } }