Spring Batch 异步调用任务
程序员文章站
2022-03-04 09:36:23
...
在默认的情况下任务的调用并不是异步执行的。
这会导致前端会返回 500 服务器错误,因为一个任务的执行时间可能会超过几分钟。
如上面的图片显示的错误,API 返回了超时。
解决办法
可以配置 Batch 批量程序采取异步执行的方式。
Spring RestController 的代码不需要改变,还是使用 JobLauncher 来运行的。
代码如下:
JobParameters jobParameters = new JobParametersBuilder().addDate("timestamp", new Date()).toJobParameters();
JobExecution jobExecution = jobLauncher.run(cloudSyncJob, jobParameters);
logger.debug("JOB ID - [{}]", jobExecution.getJobId());
需要修改的地方是你的 Batch 配置类。
需要增加下面这段代码。
/**
* Config to async run Batch Jobs
*
* @param jobRepository
* @return
*/
@Bean
public SimpleJobLauncher simpleJobLauncher(JobRepository jobRepository) {
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(jobRepository);
jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor());
return jobLauncher;
}
这里面最关键的一句话就是:
jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor());
上面的这段代码是最关键的部分。