问题标签 [spring-retry]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1850 浏览

junit - 春季重试不工作

我正在尝试设置一个非常简单的测试,看看我是否可以让 Springs Retry API 工作,但它似乎没有按预期工作。下面是我的代码/配置。我正在使用 Spring 3.0

POM.xml 中定义的 Spring 重试版本

被测类的接口

接口实现

JUnit 类

控制台输出

我期待着“尝试!” 打印到控制台 3 次。而是抛出一个异常,并且 JUnit 在那里失败。重试不应该运行3次吗?我在这里想念什么?

0 投票
1 回答
1183 浏览

java - 如何组织 Spring Integration 重试方法的列表随着每次重试而减少?

有以下带有 Retry 的 Spring Integration 配置:

简化的Java代码如下:

重试此代码的问题在于,每次重试时可能会部分处理 List sdConfCodes,因此每次我们需要发送以处理较少数量的元素。组织此代码的最佳方法是什么?

根据 Artem Bilan 的建议(谢谢!),我在 SDCreationServiceImpl 中创建了带有变量列表的第二个方法,即 activateConfirmationCodes,然后在 XML 规范中将该方法指向为 sdCreationServiceImpl 的方法。

然后服务激活器的 XML 规范如下:

是的,这个方法 activateConfirmationCodes 在 Retry 中被调用,但是第一个方法 processMessage 根本没有被调用。是否可以指定一种方法在第一次尝试时调用,而另一种方法用于重试? 其次,这种设计的列表变成了单例,这会给多线程带来问题,对吗?此列表是否可以仅与特定消息的 bean 相关联?

0 投票
0 回答
537 浏览

java - 如何在配置文件中按规范替换 Spring Retryable 注解?

我成功地为我的代码实现了@Retryable 注释。但是,为了兼容性,我需要返回 1.03 的版本进行 spring-retry。当我查看jar spring-retry-1.0.3.RELEASE.jar 时没有注释,所以我需要在配置文件中写一些东西。我的代码很简单:

0 投票
0 回答
1390 浏览

java - Spring Batch:以较小的块重试块与单项处理

我有一个使用 Spring Batch 3.0.6 的应用程序。Spring Batch 作业使用块处理。提交间隔设置为 100,重试限制设置为 5。

当达到提交间隔时,写入器将数据块(100 条记录)写入另一个应用程序(通过 TCP)。如果其中一条记录是错误的(无论出于何种原因导致异常),那么 Spring Batch 会尝试写入该块 5 次(重试限制)并且每次都失败(如预期的那样)。

Spring Batch 然后尝试通过一次重试一条记录来找出块中的 100 条记录中的哪一条失败(即提交间隔 = 1)。这似乎是重试的默认行为。

有没有办法通过一次重试 10 条记录并逐渐缩小重试大小直到找到有问题的记录来提高效率。这样,如果第 95 条记录是坏的,那么我们发现它比从记录 1 开始一次检查它们更快。

我从 2011 年发现了这篇文章:

Spring Batch:在写入期间回滚后不遵守提交间隔

有没有办法让 SB 首先尝试更小的块来缩小坏记录的位置。较小的块大小(例如,10 个项目)可以是可选的用户可配置项目,之后 SB 可以一次尝试一个项目来查找不良记录。

0 投票
1 回答
4643 浏览

spring - 即使成功后,Spring Batch 也会以块大小 1 重复步骤

摘要:即使读取器/处理器/写入器成功,作业也会重新启动/重试。

我的步骤定义如下:

在某些时候,我希望某些 HTTP 错误触发重试,但此时,所有这些代码都被注释掉了。我只有实现 Item* 接口的简单类,块大小为 1。

我没有做任何我能说的导致重复政策不止一次的事情。

我的应用程序是一个具有多个 JMS 侦听器的 Spring Boot 应用程序。当侦听器收到消息时,它会使用消息内容分派适当的作业。

这份工作是一个出口。JMS 消息提供要导出的记录的 ID。ItemReader(使用@StepScope 注释)将记录拉入 Map。ItemProcessor 将附加数据添加到 Map。ItemWriter 使用先前收集的数据使用 Basic Auth 执行 HTTP POST。

测试类在一个单独的进程中注册 REST 侦听器并发布 JMS 消息。当 REST 方法收到消息时,它会退出。这意味着成功。(测试需要加强。)

现在发生的情况是,尽管成功(没有异常/错误、身份验证通过、双向交换数据)REST 事务,但 Batch 框架会重复该步骤。由于测试类在响应 REST 请求后退出,因此新的 POST 失败。我让它运行一次,它进行了超过 120 次重试。

问题:在成功的情况下,如何不触发重试/重复机制?

日志:

0 投票
1 回答
1867 浏览

java - 如何将 Spring Retry 与 AsyncRestTemplate 集成

如何Spring Retry与外部调用集成AsyncRestTemplate?如果不可能,是否有另一个框架支持它?

我的用例:

你如何重试这个future.get()调用?如果外部服务返回 404,我想避免在两者之间再次调用这些任务,而只是重试外部调用?我不能只future.get()用 a包装,retryTemplate.execute()因为它实际上不会再次调用外部服务。

0 投票
1 回答
2605 浏览

spring - Spring Batch:使用@Retryable 和@EnableRetry 注解重试tasklet

我有这个将文件上传到 Amazon S3 的小任务。现在,我想在AmazonClientException抛出 an 时重试 tasklet 执行。我认为使用@Retryable注释可以完成这项工作。

小任务:

作业配置:

但是,它并没有做它应该做的事情。抛出异常时,批处理作业仍然不会重试 tasklet。

有什么想法吗?

这也是配置

0 投票
1 回答
4743 浏览

spring - Spring重试在RestController中不起作用

我正在尝试春季重试,但遇到了一个奇怪的问题。当我在 Rest Controller 中的方法上使用重试注释时,重试不起作用。但是,如果我将该方法移至单独的服务类,它就可以工作。以下代码不起作用:

但以下是:

我的问题是为什么@Retryable在控制器中使用时不起作用?

0 投票
1 回答
511 浏览

spring-retry - 如何在 StatefulRetryOperationsInterceptor 中使用 messageKeyGenerator

我正在尝试使用 Spring 的 StatefulRetryOperationsInterceptor 为 RabbitMQ 实现示例重试机制。

如文档中所述,我需要设置消息密钥生成器,因为消息 ID 不存在。我不明白的是每条消息生成的唯一 ID 的真正用法。即,当我使用以下实现时,重试没有任何问题:

0 投票
1 回答
181 浏览

spring - Transacional方法上的Spring重试不执行相同的步骤序列

我想在发生 JpaOptimisticLockingFailureException 时重试事务服务方法

当我使用 @Retryable 注释注释服务方法时

并且服务方法执行以下逻辑

我一次执行 2 个请求(创建发生 JpaOptimisticLockingFailureException 的情况)。

提交第一个事务,第二个抛出 JpaOptimisticLockingFailureException 并重试。

插入客户时重试尝试失败,而不是调用 findOrCreate 方法,甚至是 getByCode 方法

是否可以使其正确重试?