首页 > 解决方案 > 春季批处理:如果未在特定时间完成,则重试作业

问题描述

我正在开发一个使用过的 Spring 批处理应用RetryTemplate程序SimpleRetryPolicy

在此应用程序中,ItemProcessor通常需要 30-35 分钟才能完成特定任务。但有时,完成同样的任务需要不到 2 小时。

ItemProcessor如果分配的任务在给定的时间内没有完成,有没有办法重试我的?

我正在寻找一些 Java/Spring 内置功能,而不是编写自己的超时逻辑。

标签: springspring-batchspring-retryretrypolicyspring-batch-job-monitoring

解决方案


您可以定义transactional-attributes给定的步骤。(https://docs.spring.io/spring-batch/trunk/reference/htmlsingle/#transactionAttributes

事务属性可用于控制隔离、传播和超时设置。

<step id="step1">
  <tasklet>
      <chunk reader="itemReader" writer="itemWriter" commit-interval="2"/>
      <transaction-attributes isolation="DEFAULT"
                              propagation="REQUIRED"
                              timeout="30"/>
  </tasklet>
</step>

如果您使用的是 Java 配置,请检查https://stackoverflow.com/a/23921558/1942642


推荐阅读