使用@Lazy注解解决循环依赖关系。
示例代码:
@Configuration @EnableBatchProcessing public class BatchConfig {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Autowired
private DataSource dataSource;
@Autowired
private LocalContainerEntityManagerFactoryBean entityManagerFactory;
@Bean
public ItemReader reader() {
//...
}
@Bean
public ItemProcessor processor() {
//...
}
@Bean
public ItemWriter writer() {
//...
}
@Bean
public JobExecutionListener listener() {
//...
}
@Bean
@Lazy
public Job someJob() {
return jobBuilderFactory.get("someJob")
.incrementer(new RunIdIncrementer())
.listener(listener())
.flow(step1())
.end()
.build();
}
@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
. chunk(10)
.reader(reader())
.processor(processor())
.writer(writer())
.build();
}
@Bean
@Lazy
public BatchDataSourceInitializer batchDataSourceInitializer() {
return new BatchDataSourceInitializer(dataSource, entityManagerFactory.getObject());
}
}
在这个示例代码中,我们使用了@Lazy注解来解决循环依赖关系。这样,在应用程序启动之后,只有第一次使用batchDataSourceInitializer和entityManagerFactory时才会创建它们。在此之前,就不会创建它们。这可以避免循环依赖关系。