如何选择应在 Spring Batch + Spring Rest API 中运行的作业

我正在尝试实现 2 个 Spring Batch 作业,这些作业将在使用端点时运行。既然 JobLauncher 方法对它们来说都是一样的,那么你如何选择要执行哪一个呢?


@Autowired

private JobLauncher jobLauncher;


@Autowired

private Job job;


@RequestMapping(

        value = "/expired",

        method = RequestMethod.GET,

        produces = MediaType.APPLICATION_JSON_UTF8_VALUE,

        params = {"expireDate"}

)

@ResponseBody

public ResponseDTO expiredJob(@RequestParam(value = "expireDate") String expireDate) throws BusinessException, Exception {


    if (!DateValidator.isDateFormatValid(expireDate)) {

        throw new BusinessException(ExceptionCodes.DATE_FORMAT_ERROR);

    }

    JobParameters jobParameters = new JobParametersBuilder().addString("expireDate", expireDate).toJobParameters();

    jobLauncher.run(job, jobParameters);


    ResponseDTO responseDTO = new ResponseDTO();


    return responseDTO;

}


@RequestMapping(

        value = "/lucky",

        method = RequestMethod.GET,

        produces = MediaType.APPLICATION_JSON_UTF8_VALUE

)

@ResponseBody

public ResponseDTO rciplusJob() throws BusinessException, Exception {


    JobParameters jobParameters = new JobParameters();

    jobLauncher.run(job, jobParameters);


    ResponseDTO responseDTO = new ResponseDTO();


    return responseDTO;

}


喵喔喔
浏览 115回答 1
1回答

慕容708150

你可以像我一样这样做。我假设您为每个作业都有一个春季批处理作业配置。例如:@Bean(name = "job1")public Job job1() {    return jobBuilders.get("job1")            .incrementer(new RunIdIncrementer())            .flow(step1())            .end()            .build();}和job2一样:@Bean(name = "job2")public Job job2() {    return jobBuilders.get("job2")            .incrementer(new RunIdIncrementer())            .flow(step2())            .end()            .build();}现在在您的控制器中,您只需自动连接两个作业:@Autowired@Qualifier("job1")private Job job1;@Autowired@Qualifier("job2")private Job job2;要启动它们中的每一个,您可以这样做:final JobExecution jobExecution = jobLauncher.run(job, jobParameters);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java