Перед обновлением до Spring Boot 3 и Spring Batch 5 я мог выполнять несколько объектов Job, определенных в моем приложении, в одном и том же файл. Задания будут выполняться последовательно в зависимости от их порядка в конфигурации. Мне не нужно было явно указывать имя задания.
После обновления до Spring Boot 3, Spring Batch 5 и JDK 17 я больше не могу выполнять несколько заданий без явного указания задания. имя. Если я попытаюсь запустить приложение без указания имени задания, произойдет сбой с ошибкой:
Код: Выделить всё
java.lang.IllegalArgumentException: Job name must be specified in case of multiple jobs
Код: Выделить всё
spring:
batch:
job:
name: test1Job
Код: Выделить всё
spring:
batch:
job:
name(s): test1Job,test2Job # This doesn't work
Что я могу сделать? Пробовали
- Указать одно имя задания в application.yml, работает нормально.
- Использование названий заданий, разделенных запятыми, или массива для несколько заданий в application.yml, что не работает.
- Поиск в официальной документации Spring Batch 5 для обработки нескольких вакансии, но я не смог найти решение.
Вот упрощенная версия моей конфигурации с двумя заданиями. Каждое задание определяется в отдельном классе @Configuration.
Код: Выделить всё
@Configuration
@AllArgsConstructor
public class Test1JobConfig {
private Config config;
private PlatformTransactionManager transactionManager;
@StepScope
@Bean(name = "reader1", destroyMethod = "")
public Reader1 reader1() {
return new Reader1();
}
@StepScope
@Bean(name = "writer1", destroyMethod = "")
public Writer1 writer1() {
return new Writer1();
}
@Bean
public Step test1Step(Reader1 reader1, Writer1 writer1, ChunkListener listener, Config config, JobRepository jobRepository) {
return new StepBuilder("test1Step", jobRepository)
.
chunk(config.getChunkSize(), transactionManager)
.reader(reader1)
.writer(writer1)
.listener(listener)
.build();
}
@Bean
public Job test1Job(Reader1 reader1, Writer1 writer1, ChunkListener listener, JobExecutionListener executionListener, Config config, JobRepository jobRepository) {
return new JobBuilder("test1Job", jobRepository)
.incrementer(new RunIdIncrementer())
.listener(executionListener)
.flow(test1Step(reader1, writer1, listener, config, jobRepository))
.end()
.build();
}
}
Код: Выделить всё
@Configuration
@AllArgsConstructor
public class Test2JobConfig {
private Config config;
private PlatformTransactionManager transactionManager;
@StepScope
@Bean(name = "reader2", destroyMethod = "")
public Reader2 reader2() {
return new Reader2();
}
@StepScope
@Bean(name = "writer2", destroyMethod = "")
public Writer2 writer2() {
return new Writer2();
}
@Bean
public Step test2Step(Reader2 reader2, Writer2 writer2, ChunkListener listener, Config config, JobRepository jobRepository) {
return new StepBuilder("test2Step", jobRepository)
.
chunk(config.getChunkSize(), transactionManager)
.reader(reader2)
.writer(writer2)
.listener(listener)
.build();
}
@Bean
public Job test2Job(Reader2 reader2, Writer2 writer2, ChunkListener listener, JobExecutionListener executionListener, Config config, JobRepository jobRepository) {
return new JobBuilder("test2Job", jobRepository)
.incrementer(new RunIdIncrementer())
.listener(executionListener)
.flow(test2Step(reader2, writer2, listener, config, jobRepository))
.end()
.build();
}
}
Как настроить и выполнить несколько заданий в Spring Batch 5 с помощью Spring Boot 3?
Есть ли способ:
- Запустить несколько заданий без явного указания их имен?
< li>Укажите несколько имен заданий в файле application.yml, чтобы запускать их последовательно? - В качестве альтернативы существует ли новый рекомендуемый подход для запуска нескольких заданий в этой версии Spring Batch ?
Подробнее здесь: https://stackoverflow.com/questions/792 ... quentially