我在关注官方的Spring Batch starter guide。我有一个基本的问题。我得到一个错误,没有定义Bean JobRepository。指南实际上从未创建过该bean。它用于importUserJob和step1。这怎么可能?他们不应该创建Bean来配置数据库等吗?这是指南中的代码。完整的代码可以在here中找到。
@Configuration
public class BatchConfiguration {
// tag::readerwriterprocessor[]
@Bean
public FlatFileItemReader<Person> reader() {
return new FlatFileItemReaderBuilder<Person>()
.name("personItemReader")
.resource(new ClassPathResource("sample-data.csv"))
.delimited()
.names(new String[]{"firstName", "lastName"})
.fieldSetMapper(new BeanWrapperFieldSetMapper<Person>() {{
setTargetType(Person.class);
}})
.build();
}
@Bean
public PersonItemProcessor processor() {
return new PersonItemProcessor();
}
@Bean
public JdbcBatchItemWriter<Person> writer(DataSource dataSource) {
return new JdbcBatchItemWriterBuilder<Person>()
.itemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>())
.sql("INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)")
.dataSource(dataSource)
.build();
}
@Bean
public Job importUserJob(JobRepository jobRepository,
JobCompletionNotificationListener listener, Step step1) {
return new JobBuilder("importUserJob", jobRepository)
.incrementer(new RunIdIncrementer())
.listener(listener)
.flow(step1)
.end()
.build();
}
@Bean
public Step step1(JobRepository jobRepository,
PlatformTransactionManager transactionManager, JdbcBatchItemWriter<Person> writer) {
return new StepBuilder("step1", jobRepository)
.<Person, Person> chunk(10, transactionManager)
.reader(reader())
.processor(processor())
.writer(writer)
.build();
}
}
”
谢谢
2条答案
按热度按时间k7fdbhmy1#
JobRepository
将在您添加依赖项后立即自动配置:这还将在为您的应用程序配置的数据库中创建几个表。比如
BATCH_JOB_EXECUTION
和BATCH_STEP_EXECUTION
。在正确的自动配置之后,
JobRepositoty
bean可以在任何组件或配置类中自动连接。也可以作为构造函数参数,如BatchConfiguration
的代码片段。blpfk2vs2#
Sping Boot 创建了该bean并将其添加到应用程序上下文。因此,可以在bean定义方法中自动连接它,并使用它来配置作业和步骤。
有关更多详细信息,请查看Sping Boot 文档中有关Spring Batch的部分。