gpt4 book ai didi

spring-mvc - Spring Batch - 使用相同的作业参数重新运行作业

转载 作者:行者123 更新时间:2023-12-05 04:10:29 29 4
gpt4 key购买 nike

这里是 Spring Batch 新人,所以,期待任何事情。

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

我可以第一次使用参数 paymentPeriod=1 和来自 postman 的以下端点运行作业

@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 cannot start a job instance that already exists with name paymentJobparameters=paymentPeriod=1

最佳答案

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

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

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

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

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

java.lang.System.currentTimeMillis() 转换为 String 并附加到您的参数,例如 String.format("paymentPeriod=%s", paymentPeriod+java.lang .System.currentTimeMillis()) 而不是你现在的样子。

希望你明白了。

关于spring-mvc - Spring Batch - 使用相同的作业参数重新运行作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44430231/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com