【问题标题】:Spring Batch - Rerun Job with same Job ParameterSpring Batch - 使用相同的作业参数重新运行作业
【发布时间】:2017-11-09 20:16:26
【问题描述】:

Spring Batch 新人来了,所以,期待什么。

我有一个使用给定的作业参数paymentPeriod=1 成功运行到完成的作业。尽管要求希望该作业能够使用相同的作业参数 paymentPeriod=1 重新运行。

我可以第一次使用参数paymentPeriod=1 运行作业,并使用来自邮递员的以下端点

@RestController
@RequestMapping(value = "api/jobs")
public class JobController {
    @Autowired
    private JobOperator jobOperator;

    @RequestMapping(value = "/pay/{paymentPeriod}", method = RequestMethod.POST)
    @ResponseStatus(HttpStatus.ACCEPTED)
    public void launchPaymentJob(@PathVariable Integer paymentPeriod) throws Exception {
        this.jobOperator.start("paymentJob", String.format("paymentPeriod=%s", paymentPeriod));
    }
}

虽然当我使用相同的参数重新运行时,我得到 JobInstanceAlreadyExistsException 无法启动名称为 paymentJobparameters=paymentPeriod=1 的作业实例

【问题讨论】:

    标签: spring-mvc spring-boot spring-data-jpa spring-batch


    【解决方案1】:

    按照 Spring Batch 中的作业实例和作业执行的概念,您不能再次启动已完成的作业实例,尽管您可以再次启动相同的作业实例直到它未完成(以及更多的作业状态)。

    作业实例的唯一性是通过 jobId 和作业参数来实现的。

    因此,如果您不更改参数,则无法使用相同的实例启动已完成的作业。

    如果您的 REST 端点被限制为一次又一次地采用相同的值,您需要在该方法中添加一个唯一参数,这很可能是 - java.lang.System.currentTimeMillis()

    您可以使用任何其他唯一值,尽管当前系统时间非常方便。

    java.lang.System.currentTimeMillis() 转换为 String 并使用 String.format("paymentPeriod=%s", paymentPeriod+java.lang.System.currentTimeMillis()) 之类的东西附加到您的参数,而不是您当前的值。

    希望您能理解。

    【讨论】:

    • 感谢您的回复,不过我有疑问。当我将参数作为paymentPeriod 和时间戳的 concat 传递时,在作业失败时如何动态获取唯一的作业实例值以重新启动
    • 通过使用JobExplorer 查询您的元数据表,您几乎不需要那个精确的ID,因为方法看起来像这样,List<JobInstance> lastInstances = jobExplorer.getJobInstances( job.getName(), 0, 1);
    • 文档是here
    • 如何使用JobOperatorpaymentPeriodSystem.currentTimeMillis() 作为两个参数传递,以便我可以在ItemReader 实现中使用@Value("#{jobParameters['paymentPeriod']}") final Integer paymentPeriodId 轻松选择paymentPeriod
    • (doc)[docs.spring.io/spring-batch/apidocs/org/springframework/batch/…parameters - the parameters to launch it with (comma or newline separated name=value pairs) 所以你不要连接......只需将它作为新参数传递给paymentPeriod=1,time=...
    猜你喜欢
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 2015-03-05
    • 2015-06-10
    • 2017-06-15
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多