У меня есть пакетное задание, как показано ниже, и оно отлично работает с нижеприведенной конфигурацией
@Configuration
@AllArgsConstructor
public class BatchJobConfig {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
private final SecondaryRepository secondaryRepository;
private final PrimaryRepository primaryRepository;
private final BatchConfigurer batchConfigurer;
@Bean
Job job() throws Exception {
return jobBuilderFactory.get("importJob")
.incrementer(new RunIdIncrementer())
.flow(importPrimaryDetails())
.end()
.build();
}
@Bean
Step importPrimaryDetails() {
return this.stepBuilderFactory.get("importPrimaryDetails")
.<AccountPrimary, Primary>chunk(100)
.reader(primaryItemReader())
.processor(secondaryProcessor())
.writer(secondaryWriter())
.listener(stepExecutionListener())
.build();
}
@Bean
RepositoryItemReader<AccountPrimary> primaryExchangeItemReader() {
Map<String, Sort.Direction> sort = new HashMap<>();
sort.put("ExistFlag", Sort.Direction.ASC);
return new RepositoryItemReaderBuilder<Primary>()
.repository(primaryRepository)
.methodName("findByExistFlag")
.arguments("Y", "Y")
.sorts(sort)
.name("PrimaryItemReader")
.build();
}
@Bean
RepositoryItemWriter<Secondary> secondaryWriter() {
return new RepositoryItemWriterBuilder<Secondary>()
.repository(secondaryRepository)
.methodName("save")
.build();
}
@Bean
SecondaryProcessor secondaryProcessor() {
return new SecondaryProcessor();
}
@Bean
StepExecutionListener stepExecutionListener() {
return new StepListener();
}
}
Вместо прямого вызова метода процессора, считывателя, записи или прослушивания, или перехода в задание. Я думал о создании экземпляров с автопроводкой, так как эти методы уже аннотированы с помощью bean-компонента и напрямую передают их заданию или этапу. Однако, если я попытаюсь сделать что-либо даже с одним определенным здесь компонентом, это даст мне ошибку циклической зависимости. Почему я не могу использовать это так?