Java trycatch使用重試Retryer


重試的工具類

Guava-retrying

依賴

<!-- https://mvnrepository.com/artifact/com.github.rholder/guava-retrying -->
<dependency>
    <groupId>com.github.rholder</groupId>
    <artifactId>guava-retrying</artifactId>
    <version>2.0.0</version>
</dependency>

  

Retryer<Boolean> retryer = RetryerBuilder.<Boolean>newBuilder()
                //拋出runtime異常、checked異常時都會重試,但是拋出error不會重試。
                .retryIfException()
                //返回false也需要重試(可以根據返回值確定需不需要重試)
                .retryIfResult(Predicates.equalTo(false))
                //重調策略
                .withWaitStrategy(WaitStrategies.fixedWait(10, TimeUnit.SECONDS))
                //嘗試次數
                .withStopStrategy(StopStrategies.stopAfterAttempt(3))
                .build();
try {
    retryer.call(callable);
} catch (RetryException | ExecutionException e) {
    // 重試失敗 后續操作
    // ...
    e.printStackTrace();
}
 

RetryerBuilder

RetryerBuilder 是一個 factory 創建者,可以定制設置重試源且可以支持多個重試源,可以配置重試次數或重試超時時間,以及可以配置等待時間間隔,創建重試者 Retryer 實例。

RetryerBuilder 的重試源支持 Exception 異常對象和自定義斷言對象,通過retryIfException 和 retryIfResult 設置,同時支持多個且能兼容。

retryIfException
retryIfException,拋出 runtime 異常、checked 異常時都會重試,但是拋出 error 不會重試。

retryIfRuntimeException
retryIfRuntimeException 只會在拋 runtime 異常的時候才重試,checked 異常和error 都不重試。

retryIfExceptionOfType
retryIfExceptionOfType 允許我們只在發生特定異常的時候才重試,比如NullPointerException 和 IllegalStateException 都屬於 runtime 異常,也包括自定義的error。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM