我使用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");
虽然对于大型响应类型不建议这样做,但在您的情况下,这可能很有用