问题标签 [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.
junit - 春季重试不工作
我正在尝试设置一个非常简单的测试,看看我是否可以让 Springs Retry API 工作,但它似乎没有按预期工作。下面是我的代码/配置。我正在使用 Spring 3.0
POM.xml 中定义的 Spring 重试版本
被测类的接口
接口实现
JUnit 类
控制台输出
我期待着“尝试!” 打印到控制台 3 次。而是抛出一个异常,并且 JUnit 在那里失败。重试不应该运行3次吗?我在这里想念什么?
java - 如何组织 Spring Integration 重试方法的列表随着每次重试而减少?
有以下带有 Retry 的 Spring Integration 配置:
简化的Java代码如下:
重试此代码的问题在于,每次重试时可能会部分处理 List sdConfCodes,因此每次我们需要发送以处理较少数量的元素。组织此代码的最佳方法是什么?
根据 Artem Bilan 的建议(谢谢!),我在 SDCreationServiceImpl 中创建了带有变量列表的第二个方法,即 activateConfirmationCodes,然后在 XML 规范中将该方法指向为 sdCreationServiceImpl 的方法。
然后服务激活器的 XML 规范如下:
是的,这个方法 activateConfirmationCodes 在 Retry 中被调用,但是第一个方法 processMessage 根本没有被调用。是否可以指定一种方法在第一次尝试时调用,而另一种方法用于重试? 其次,这种设计的列表变成了单例,这会给多线程带来问题,对吗?此列表是否可以仅与特定消息的 bean 相关联?
java - 如何在配置文件中按规范替换 Spring Retryable 注解?
我成功地为我的代码实现了@Retryable 注释。但是,为了兼容性,我需要返回 1.03 的版本进行 spring-retry。当我查看jar spring-retry-1.0.3.RELEASE.jar 时没有注释,所以我需要在配置文件中写一些东西。我的代码很简单:
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 年发现了这篇文章:
有没有办法让 SB 首先尝试更小的块来缩小坏记录的位置。较小的块大小(例如,10 个项目)可以是可选的用户可配置项目,之后 SB 可以一次尝试一个项目来查找不良记录。
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 次重试。
问题:在成功的情况下,如何不触发重试/重复机制?
日志:
java - 如何将 Spring Retry 与 AsyncRestTemplate 集成
如何Spring Retry
与外部调用集成AsyncRestTemplate
?如果不可能,是否有另一个框架支持它?
我的用例:
你如何重试这个future.get()
调用?如果外部服务返回 404,我想避免在两者之间再次调用这些任务,而只是重试外部调用?我不能只future.get()
用 a包装,retryTemplate.execute()
因为它实际上不会再次调用外部服务。
spring - Spring Batch:使用@Retryable 和@EnableRetry 注解重试tasklet
我有这个将文件上传到 Amazon S3 的小任务。现在,我想在AmazonClientException
抛出 an 时重试 tasklet 执行。我认为使用@Retryable
注释可以完成这项工作。
小任务:
作业配置:
但是,它并没有做它应该做的事情。抛出异常时,批处理作业仍然不会重试 tasklet。
有什么想法吗?
这也是配置
spring - Spring重试在RestController中不起作用
我正在尝试春季重试,但遇到了一个奇怪的问题。当我在 Rest Controller 中的方法上使用重试注释时,重试不起作用。但是,如果我将该方法移至单独的服务类,它就可以工作。以下代码不起作用:
但以下是:
我的问题是为什么@Retryable
在控制器中使用时不起作用?
spring-retry - 如何在 StatefulRetryOperationsInterceptor 中使用 messageKeyGenerator
我正在尝试使用 Spring 的 StatefulRetryOperationsInterceptor 为 RabbitMQ 实现示例重试机制。
如文档中所述,我需要设置消息密钥生成器,因为消息 ID 不存在。我不明白的是每条消息生成的唯一 ID 的真正用法。即,当我使用以下实现时,重试没有任何问题:
spring - Transacional方法上的Spring重试不执行相同的步骤序列
我想在发生 JpaOptimisticLockingFailureException 时重试事务服务方法
当我使用 @Retryable 注释注释服务方法时
并且服务方法执行以下逻辑
我一次执行 2 个请求(创建发生 JpaOptimisticLockingFailureException 的情况)。
提交第一个事务,第二个抛出 JpaOptimisticLockingFailureException 并重试。
插入客户时重试尝试失败,而不是调用 findOrCreate 方法,甚至是 getByCode 方法
是否可以使其正确重试?