#spring-batch
#spring-batch
Вопрос:
Я планирую использовать Spring Batch. Нам нравится инициировать выполнение новых заданий в наших модулях, которые отвечают на запросы интерфейса.
Псевдокод:
@PostMapping(path = "/request-report/{id}")
public void requestReport(String id){
this.jobOperator.start("reportJob", new Properties("1"));
}
Но мы не хотим, чтобы задание выполнялось во интерфейсном модуле. Для этого мы хотели бы создать отдельный модуль микросервиса.
Я вижу следующие решения:
- выполните вызов rest из модуля интерфейса в модуль spring-batch и запустите задание там. я мог бы это сделать, но, если возможно, я хотел бы пропустить этот шаг и интегрировать его в spring batch db.
- в модуле внешнего интерфейса я создаю JobLauncher, который имеет SimpleAsyncTaskExecutor с нулевым размером. Таким образом, он никогда не выполнит задание.
https://docs.spring.io/spring-batch/docs/current/reference/html/job.html#configuringJobLauncher
@Bean
public JobLauncher jobLauncher() {
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(jobRepository());
jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor());
jobLauncher.afterPropertiesSet();
return jobLauncher;
}
- в интерфейсном модуле я не использую BatchAutoConfiguration, но просматриваю некоторые вещи, но что?
Я думаю, что мне также нужно написать какое-то программное обеспечение, которое сканирует таблицу заданий и проверяет, присутствует ли не запущенное задание, и запуск снова выполняется в spring-batch-pod.
Спасибо за помощь!
Ответ №1:
Если вы настроите средство запуска заданий с помощью a SimpleAsyncTaskExecutor
, оно будет запускать задания в отдельных потоках в одной и той же JVM (следовательно, в одном и том же контейнере и модуле).
Поэтому, если вы не предоставите пользовательский TaskExecutor
интерфейс, который запускает задания в отдельной JVM / container / pod, вам нужно будет изменить свою архитектуру, чтобы использовать очередь заданий. В разделе Запуск пакетных заданий с помощью сообщений из справочных документов показано, как настроить такой шаблон.