问题标签 [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 回答
6155 浏览

java - Spring Retry 中的 @Retryable 注解不会触发

我有一个导致死锁的表更新,并且当该方法获得某种锁定异常时,我试图让 Spring Retry 重试。我试过去掉 maxAttempts、value 和 backoff,但它似乎没有捕捉到任何异常。我错过了什么吗?我需要在 Application 文件中声明一个 bean 吗?任何帮助将非常感激!

应用程序.Java

详细服务

编辑

重写了我上面的 DetailService 以提供更多细节并添加缺少的方法

0 投票
2 回答
9531 浏览

spring - 如何让 Spring Batch 在一段时间后重试失败的步骤?

如何让 Spring Batch 在一段时间后重试失败的步骤?

如果该步骤失败的次数超过 x 次,我不想再重试该步骤并让整个作业失败。

我正在使用 Java Config,并且不喜欢使用 XML 来配置重试。

0 投票
2 回答
2833 浏览

spring - Spring Batch - 要读取的文件不可用

我有一个 Spring 批处理作业,第一步是读取文件并写入数据库。如果该文件不存在,我希望系统等待 x 分钟,然后重试该步骤最多 y 次尝试。我怎样才能做到这一点?

细节

ItemReader如下:

目前,如果file不存在,则会引发以下异常并且作业失败。

com.myorg.LoadApplication 代码启动批处理应用程序并且是:

更新

在阅读了 dimitrisli 的答案后,我在@Configuration课堂上尝试了这个(注意:我也添加@EnableRetry到了配置类中):

ItemStreamException被抛出并且应用程序退出而不重试。我怎样才能让它重试?

0 投票
2 回答
1149 浏览

java - Spring Retry 可以与 Spring Batch FlatFileItemReader 一起使用吗

我有以下内容ItemReader

运行作业时,要读取的文件(即loadFile)可能可用也可能不可用。如果文件不可用,我希望阅读器休眠约 30 分钟,然后重试打开文件。如果在五次尝试后找不到该文件,它可能会像通常那样通过抛出ItemStreamException.

不幸的是,上面的代码不会尝试重试打开文件。它在第一次调用 open 时抛出ItemStreamException,并且不会重试打开。

有人可以解释如何做到这一点吗?注意:我确实@EnableRetrySpringBootApplication上课。

0 投票
1 回答
1061 浏览

java - @Retryable 不适用于 Spring-boot-gradle-plugin

我正在尝试通过在我的(spring boot gradle 插件)应用程序中添加重试逻辑@Retryable

到目前为止我做了什么:

在类路径中添加了最新的 starter aop:

重试类:

测试逻辑:

但是重试逻辑不起作用。有人有什么建议吗?

0 投票
2 回答
431 浏览

spring - @Retryable maxAttempts 超出后如何捕获 Spring Batch 的 ItemStreamException?

我有以下内容ItemReader

第 5 次尝试后,如果 ItemStreamExceptionloadFile不存在,则会引发。我怎样才能捕捉到这个异常?

我想通过向管理员发送电子邮件来处理此异常。我尝试过jobLauncher.run(job, jobParameters);使用 try catch 子句,但它不起作用。

0 投票
1 回答
1950 浏览

spring-integration - 如何使用 Spring Integration with Java config 通过 SFTP 每天获取文件?

我需要每天通过 SFTP 获取一个文件。我想将 Spring Integration 与 Java 配置一起使用。该文件通常在每天的特定时间可用。应用程序应每天尝试在该时间附近获取文件。如果文件不可用,它应该继续重试 x 次。在 x 次尝试后,它应该发送一封电子邮件,让管理员知道该文件在 SFTP 站点上仍然不可用。

一种选择是使用SftpInboundFileSynchronizingMessageSource. 在 中MessageHandler,我可以开始处理文件的工作。但是,我真的不需要与远程文件系统同步。毕竟,这是文件的预定交付。另外,我最多需要延迟 15 分钟以进行下一次重试,并且每 15 分钟轮询一次对于每日文件来说似乎有点过分。我想我可以使用它,但需要一些机制在经过一段时间后发送电子邮件并且没有收到文件。

另一个选项似乎是使用getSFTP 出站网关。但我能找到的唯一例子似乎是 XML 配置。

更新

使用以下 Artem Bilan 的回答提供的帮助后添加代码:

配置类:

RetryCompoundTriggerAdvice 类:

0 投票
1 回答
2762 浏览

spring-amqp - spring amqp enable retry by configuration 并根据指定异常阻止

我有以下两种情况

  1. ExceptionA的情况下:重试有限次,最后当重试次数用尽时,消息被写入死信队列
  2. ExceptionB的情况下:简单地说,应该将消息写入死信队列

我想在同一个侦听器容器工厂和同一个队列上支持这两种情况。

我已经有以下配置来成功支持案例 1

现在我想扩展之前的配置以支持案例 2。


编辑,感谢加里的快速回复。

这是我的新配置,但我仍然对这两个异常进行重试:ListenerExecutionFailedException、AmqpRejectAndDontRequeueException

0 投票
2 回答
3150 浏览

spring - 在方法上具有 @Retryable 注释的模拟 Spring @Service 失败并出现 UnfinishedVerificationException

我正在使用Spring Boot1.4.0.RELEASEspring-boot-starter-batchspring-boot-starter-aopspring-retry

我有一个@Service在运行时模拟的 Spring Integration 测试。我注意到,如果@Service该类在其方法上包含任何@Retryable注释,那么它似乎会干扰Mockito.verify(),我得到一个UnfinishedVerificationException. 我想这一定与此有关spring-aop?如果我注释掉所有@Retryable注释@Service然后验证再次正常工作。

我创建了一个github 项目来演示这个问题。

它失败sample.batch.MockBatchTestWithRetryVerificationFailures.batchTest()validateMockitoUsage();

有类似的东西:

但是,我有另一个类 ( sample.batch.MockBatchTestWithNoRetryWorking.batchTest()) 带有一个@Service没有任何@Retryable注释的模拟类,并且验证工作正常。

我究竟做错了什么?

在我的 pom.xml 我有以下内容:

然后是所有相关的 Java 类

编辑:根据我放在一起显示问题的示例项目更新了问题和代码。

0 投票
3 回答
22667 浏览

java - 运行 JUnit 测试时 Spring 的 @Retryable 不起作用

我有这个测试:

然后我有:

然后我有这个接口(我的 abstractService 实现):

但是,当我运行测试时抛出了一个运行时异常,让我相信它没有重试。我做错了吗?