Как выбрать, какое задание следует запускать в Spring Batch + Spring Rest API - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь реализовать 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;
}

1 Ответ

0 голосов
/ 15 февраля 2019

Вы можете сделать это таким же образом, как я.

Я предполагаю, что у вас есть конфигурация пакетного задания для каждой работы.Например:

@Bean(name = "job1")
public Job job1() {
    return jobBuilders.get("job1")
            .incrementer(new RunIdIncrementer())
            .flow(step1())
            .end()
            .build();
}

и то же для задания 2:

@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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...