Как настроить конфигурацию Spring Batch по умолчанию, не нарушая автоконфигурациюJAVA

Программисты JAVA общаются здесь
Anonymous
Как настроить конфигурацию Spring Batch по умолчанию, не нарушая автоконфигурацию

Сообщение Anonymous »

Как настроить DefaultBatchConfiguration Spring Batch, не нарушая автоконфигурацию, предоставленную Spring Boot в SpringBootBatchConfiguration?
Я использую задание Spring Batch в Spring Загрузочное приложение со следующей конфигурацией:

Код: Выделить всё

@Configuration
public class MyJobConfiguration {

@Bean
public Tasklet myTasklet() {
return (contribution, chunkContext) -> {
System.out.println("execute myTasklet");
return RepeatStatus.FINISHED;
};
}

@Bean
public Step myStep(JobRepository jobRepository, Tasklet myTasklet, PlatformTransactionManager transactionManager) {
return new StepBuilder("myStep", jobRepository)
.tasklet(myTasklet, transactionManager)
.build();
}

@Bean
public Job myJob(JobRepository jobRepository, Step myStep) {
return new JobBuilder("myJob", jobRepository)
.start(myStep)
.build();
}
}
Я тестирую задание с помощью @SpringBatchTest следующим образом:

Код: Выделить всё

@SpringBatchTest
@ContextConfiguration(classes = MyJobConfiguration.class)
@EnableAutoConfiguration
class MyJobConfigurationTest {

@Autowired
private JobLauncherTestUtils jobLauncherTestUtils;

@Autowired
private JobRepositoryTestUtils jobRepositoryTestUtils;

@BeforeEach
public void setup(@Autowired Job jobUnderTest) {
this.jobLauncherTestUtils.setJob(jobUnderTest); // this is optional if the job is unique
this.jobRepositoryTestUtils.removeJobExecutions();
}

@Test
public void testMyJob() throws Exception {
// given
JobParameters jobParameters = this.jobLauncherTestUtils.getUniqueJobParameters();

// when
JobExecution jobExecution = this.jobLauncherTestUtils.launchJob(jobParameters);

// then
Assertions.assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus());
}
}
Это довольно стандартно и работает так, как ожидалось. Как видно из аннотации @EnableAutoConfiguration, он использует автоконфигурацию Spring Boot для Spring Batch, что, например, гарантирует, что схема базы данных инициализируется в базе данных в памяти для теста.Я хотел бы настроить пакетную конфигурацию, чтобы разрешить асинхронное выполнение заданий. Я изменил свою конфигурацию следующим образом:

Код: Выделить всё

@Configuration
public class MyJobConfiguration extends DefaultBatchConfiguration {

public static final int MAX_BATCH_TASK_EXECUTOR_POOL_SIZE = 20;

@Override
public TaskExecutor getTaskExecutor() {
ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
threadPoolTaskExecutor.setMaxPoolSize(MAX_BATCH_TASK_EXECUTOR_POOL_SIZE);
threadPoolTaskExecutor.afterPropertiesSet();
return threadPoolTaskExecutor;
}
В документации DefaultBatchConfiguration говорится:

Настройка возможна путем расширения класса и переопределения методов получения.

Вот почему я выбрал этот подход. Однако это, похоже, нарушает автоконфигурацию Spring Boot для Spring Batch. Весенний пакетный тест завершается неудачей, поскольку инициализация схемы базы данных больше не выполняется. Отчет об оценке состояния подтверждает это.
Можно ли таким образом настроить конфигурацию Spring Batch?
При использовании автоконфигурации Spring Boot для Spring Batch , есть ли другой способ добавить настройки?
Предпочтительнее ли настроить дополнительные средства запуска заданий, а не настраивать поведение средства запуска заданий по умолчанию?

Подробнее здесь: https://stackoverflow.com/questions/782 ... ng-autocon

Вернуться в «JAVA»