在春季批处理中返回对象作为响应的最佳方式?



我使用Spring batch运行作业。我已经创建了一个RestController来执行这个任务。然而,我希望这个工作是同步的,所以我没有通过@Async注释我的工作执行。它工作得很好,我只在工作完成后得到响应。

该场景是当编写此作业完成时,即在ItemWriter中,我正在创建object并设置其值,因此当此编写器完成时,我想返回此object作为响应体。

我知道我可以通过创建共享结构来实现这一点,但是我不想这样做。

这样做的最好和标准的方法是什么?

您可以将对象放在ExecutionContext中,然后从

检索它
final var executionContext = jobExplorer.getJobExecution(id_of_job).getExecutionContext();
final var object = executionContext.get("key");

使用作业启动器来获取它,然后再从执行上下文中获取它。

final var runJob = launcher.run(job.job(), jobParameters);
final var object = runJob.getExecutionContext().get("key");

虽然对于大型响应类型不建议这样做,但在您的情况下,这可能很有用

最新更新