Spring Batch -不需要JobRepository配置?

xyhw6mcr  于 2023-06-21  发布在  Spring
关注(0)|答案(2)|浏览(135)

我在关注官方的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();
    }
}


谢谢

k7fdbhmy

k7fdbhmy1#

JobRepository将在您添加依赖项后立即自动配置:

org.springframework.boot:spring-boot-starter-batch

这还将在为您的应用程序配置的数据库中创建几个表。比如BATCH_JOB_EXECUTIONBATCH_STEP_EXECUTION
在正确的自动配置之后,JobRepositoty bean可以在任何组件或配置类中自动连接。也可以作为构造函数参数,如BatchConfiguration的代码片段。

blpfk2vs

blpfk2vs2#

Sping Boot 创建了该bean并将其添加到应用程序上下文。因此,可以在bean定义方法中自动连接它,并使用它来配置作业和步骤。
有关更多详细信息,请查看Sping Boot 文档中有关Spring Batch的部分。

相关问题