Spring重试找到最后一次重试

2023-12-24

我在用Spring-retry-1.2.0 https://github.com/spring-projects/spring-retry/blob/master/README.md,重试工作正常,但在我的方法中我想知道重试是否是最后一次重试,是否有任何方法可以在 spring-retry 中获取 retryCount 或最后一次重试?

重审.java

public class Offers extends SimpleRetryPolicy {

@Async
@Retryable(maxAttemptsExpression = "#{retrial.times}", backoff = @Backoff(delayExpression = "#{retrial.delay}"))
public void handleOfferes(Data data) {

 AlwaysRetryPolicy policy = new AlwaysRetryPolicy();
        RetryContext context = policy.open(null);
        System.out.println("context.getRetryCount()::"+context.getRetryCount()); //Always logs 0 even if it retries 2 to 3 times...
        System.out.println("Can retry::"+canRetry(context)); //Always true
//Business Logic
//Get the last count and update the DB ...retrial is ends with failure
}


@Override
public boolean canRetry(RetryContext context) {
    System.out.println("context.getRetryCount()::"+context.getRetryCount());
    System.out.println("getMaxAttempts::"+getMaxAttempts());
    return context.getRetryCount() < getMaxAttempts();
}
}

Artem Bilan 发表评论后所做的更改

重试配置

@Configuration
public class RetryConfiguration {

@Value("${retrial.times}")
private Long delayExpression;

@Value("${retrial.delay}")
private int maxAttempts;

@Bean
@ConditionalOnMissingBean(name = "retryInterceptor")
public RetryOperationsInterceptor retryInterceptor() {
    return RetryInterceptorBuilder
            .stateless()
            .backOffOptions(0L,
                    0.0D, delayExpression)
            .maxAttempts(maxAttempts).build();
}
}

优惠.java

@Service
public class Offers {
@Async
@Retryable(interceptor = "retryInterceptor")
public void handleDeviceStatus(Data data) {
//Here how shall i get the retrial count...

}

任何帮助将不胜感激。


我认为你需要的是@Recover (RecoveryCallback如果没有注释):

@Retryable(RemoteAccessException.class)
public void service() {
    // ... do something
}
@Recover
public void recover(RemoteAccessException e) {
   // ... panic
}

看到同样的README https://github.com/spring-projects/spring-retry/blob/master/README.md and 测试用例 https://github.com/spring-projects/spring-retry/blob/master/src/test/java/org/springframework/retry/annotation/RecoverAnnotationRecoveryHandlerTests.java就此事。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring重试找到最后一次重试 的相关文章

随机推荐

  • 在哪里可以找到可用于扫描和 OCR 文档的免费 .Net (C#) 库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个免费的 Net C 库 我可以使用该库从文档扫描仪进行扫描 然后对文档进行 OCR 这样我就可以从中获取文本并将其保存在数据
  • 如何在不使用 SQL 查询表的情况下选择过去 12 个月的名称和年份?

    我如何使用当前时间选择最近 12 个月的名称 不使用任何表格 如果当前月份是十月那么我想要的结果是 month year oct 2011 nov 2011 dec 2011 jan 2012 feb 2012 mar 2012 apr 2
  • Android - 无法执行 dex:定义了多个 dex 文件

    我尝试运行我的 Android 应用程序 但收到此错误 2014 03 11 11 21 34 Dex Loader Unable to execute dex Multiple dex files define Lorg apache c
  • CSS 级联顺序 - 作者与用户[重复]

    这个问题在这里已经有答案了 按优先级升序排列 用户代理声明 用户正常声明 作者正常声明 作者重要声明 用户重要声明 CSS 规范定义author and user as Author 作者根据文档语言的约定为源文档指定样式表 例如 在 HT
  • 如何使用 API 删除 GitHub 存储库

    我正在熟悉 GitHub APIhttp developer github com v3 http developer github com v3 我正在尝试使用 Firefox 的 RESTClient 插件和curl 命令行工具 我已经
  • 连接 JS 客户端和 Python 服务器

    我对 JS 和 Python 比较陌生 所以这可能是一个初学者的问题 我正在尝试将字符串从 JS 客户端发送到 Python 服务器 然后将该字符串发送到另一个 Python 客户端 这是我的代码 JS客户端 var socket io c
  • 如何检测客户端机器是否已经安装了JRE版本?

    在应用程序中 我们为客户端提供选择是否使用 JRE 下载我们的应用程序的功能 如果可以检测客户端系统是否已经配置了 JRE 则可以以更加用户友好的方式提供此功能 如果您想限制测试以检查是否安装了 JREand在路径上 只需检查环境变量PAT
  • Laravel 调用未定义方法 App\\ Model ::mapInto()、vendor\\laravel\\framework\\src\\Illuminate\\Support\\Traits\\ForwardsCalls.php

    我试图 public function show Product product return ProductDetailResource collection product 调用未定义的方法App Model mapInto 异常 Ba
  • 通过 pybind11 返回 numpy 数组

    我有一个 C 函数计算一个大张量 我想通过它作为 NumPy 数组返回到 Pythonpybind11 https github com pybind pybind11 从 pybind11 的文档来看 似乎使用STL unique ptr
  • 如何在 Hive 中重命名分区值?

    我有一个配置单元表 videotracking playevent 它使用以下分区格式 所有字符串 source createyear createmonth createday 示例 source home createyear 2016
  • SQLite DatabaseHelper 类

    当我们从 Android 应用程序创建 SQLite 数据库时 可以使用扩展 SQLiteOpenHelper 的 DatabaseHelper 类 我的构造函数如下 public DatabaseHelper Context contex
  • Android -notifyDataSetChanged() 不起作用

    我创建了一个显示问题列表的自定义 ArrayAdapter 我查询数据库 转换该数据 将数据传递给数组 然后将该数组传递给 ArrayAdapter 以显示我的列表 dbData getDbData List
  • React-Router 的历史对象问题

    我正在使用 React 和 React Router 构建一个非常简单的网页 我已经使用 NPM 安装了最新版本的 React Router 模块 v3 0 0 在我的 index js 文件中编写了 3 个非常简单的路由 import R
  • 休眠关联顺序

    我正在使用 Hibernate 3 2 并使用条件来构建查询 我想为多对一关联添加 排序依据 但我不知道如何做到这一点 我猜 Hibernate 查询最终会看起来像这样 select t1 a t1 b t1 c t2 dd t2 ee f
  • 使用 HTTP POST 时在 URL 中传递参数

    使用POST方法时是否允许通过URL 问号后面 向网页传递参数 我知道它是有效的 无论如何 因为我公司的网络应用程序经常这样做 但我不知道标准是否真正支持它 或者我是否可以依赖这种行为 我正在考虑实现一个 SOAP 请求处理程序 该处理程序
  • 如何使用 SelectedRows 从数据网格视图中获取选定的行数据?

    我有一个在数据网格视图控件中显示的表 用户从控件中选择一行并按下按钮 我需要从该行检索单元格并将它们存储为字符串 究竟如何使用 SelectedRow 方法获取数据 我已经为此工作了几个小时 但我已经束手无策了 这是我尝试过的示例 Data
  • Visual Studio 2015 Update 3 离线安装程序 (ISO) [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 在深入研究 Visual Studio IDE 2015 update 3 离线安装程序 又名 ISO 文件 后 我找到了它并分享了该 UR
  • 计算两列之间的时间差

    将因子转换为 POSIXCT 格式 然后应用日期时间格式后 我想获取 2 个 pos1 和 pos2 之间的日期时间差 但是 当我对特定项目执行此操作时 我在控制台中得到了正确的答案 但是当我对整个集合执行操作时 控制台仅输出数字 并且日期
  • 负向前瞻正则表达式

    为什么这不起作用 尝试进行消极的前瞻 我正在尝试从垃圾箱中提取数字 但检疫箱和检查箱除外 当我执行前面带有 的代码时 它会匹配括号中的所有数字 当我删除 时 它不匹配任何内容 您还可以使用 或运算符 在否定的前瞻中 我想要 Quaranti
  • Spring重试找到最后一次重试

    我在用Spring retry 1 2 0 https github com spring projects spring retry blob master README md 重试工作正常 但在我的方法中我想知道重试是否是最后一次重试