Ошибка циклической зависимости в весеннем пакете, если бины передаются как экземпляры с автопроводкой - PullRequest
0 голосов
/ 30 марта 2020

У меня есть пакетное задание, как показано ниже, и оно отлично работает с нижеприведенной конфигурацией

@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-компонента и напрямую передают их заданию или этапу. Однако, если я попытаюсь сделать что-либо даже с одним определенным здесь компонентом, это даст мне ошибку циклической зависимости. Почему я не могу использовать это так?

...