首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Spring Batch 异步调用任务

Spring Batch 异步调用任务

作者头像
HoneyMoose
发布于 2022-01-11 15:44:05
发布于 2022-01-11 15:44:05
6940
举报
文章被收录于专栏:iSharkFlyiSharkFly

在默认的情况下任务的调用并不是异步执行的。

这会导致前端会返回 500 服务器错误,因为一个任务的执行时间可能会超过几分钟。

如上面的图片显示的错误,API 返回了超时。

解决办法

可以配置 Batch 批量程序采取异步执行的方式。

Spring RestController 的代码不需要改变,还是使用 JobLauncher 来运行的。

代码如下:

代码语言:javascript
复制
        JobParameters jobParameters = new JobParametersBuilder().addDate("timestamp", new Date()).toJobParameters();

        JobExecution jobExecution = jobLauncher.run(cloudSyncJob, jobParameters);
        logger.debug("JOB ID - [{}]", jobExecution.getJobId());

需要修改的地方是你的 Batch 配置类。

需要增加下面这段代码。

代码语言:javascript
复制
    /**
     * 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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/12/14 ,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 解决办法
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档