欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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());

 

 

上面的这段代码是最关键的部分。

 

https://www.ossez.com/t/spring-batch/13832