Spring Batch 異步調用任務

在默認的情況下任務的調用並不是異步執行的。

這會導致前端會返回 500 服務器錯誤,因爲一個任務的執行時間可能會超過幾分鐘。

 

API-run-error-01

 

 

如上面的圖片顯示的錯誤,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());

 

API-run-error-02

 

 

上面的這段代碼是最關鍵的部分。

 

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章