zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    可扩展多线程异步Socket服务器框架EMTASS 2.0
    认识迅雷界面引擎
    C语言 二维数组(指针)动态分配和释放(转)
    二维数组与双重指针(转)
    VC++6 调用teststand api的方法
    [VC6] 小谈如何解决VC6.0 open崩溃的问题(已解决)(转)
    Linux下C与Mysql的混合编程(转)
    VS2010生成安装包制作步骤 (转)
    SAO总结
    JS OOP编程
  • 原文地址:https://www.cnblogs.com/hkgov/p/11959033.html
Copyright © 2011-2022 走看看