spring batch中itemreadr读取的数据,如何传入到itemwiter
时间: 2023-11-27 08:50:18 浏览: 57
在 Spring Batch 中,ItemReader 读取的数据会被传入到 ItemProcessor 进行处理,然后再传入到 ItemWriter 中进行写操作。
具体地,ItemReader 会逐条地读取数据,然后将数据传入 ItemProcessor 中进行处理。如果 ItemProcessor 返回的结果不为 null,则将结果传入 ItemWriter 中进行写操作。如果 ItemProcessor 返回的结果为 null,则该数据将被忽略,不会被传入到 ItemWriter 中。
下面是一个示例代码片段,展示了如何使用 ItemReader、ItemProcessor 和 ItemWriter:
```java
@Configuration
@EnableBatchProcessing
public class BatchConfiguration {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Autowired
private DataSource dataSource;
@Bean
public ItemReader<Person> reader() {
JdbcCursorItemReader<Person> reader = new JdbcCursorItemReader<>();
reader.setDataSource(dataSource);
reader.setSql("SELECT id, name, age FROM person");
reader.setRowMapper(new PersonRowMapper());
return reader;
}
@Bean
public ItemProcessor<Person, Person> processor() {
return new PersonItemProcessor();
}
@Bean
public ItemWriter<Person> writer() {
JdbcBatchItemWriter<Person> writer = new JdbcBatchItemWriter<>();
writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>());
writer.setSql("INSERT INTO processed_person (id, name, age) VALUES (:id, :name, :age)");
writer.setDataSource(dataSource);
return writer;
}
@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.<Person, Person> chunk(10)
.reader(reader())
.processor(processor())
.writer(writer())
.build();
}
@Bean
public Job job() {
return jobBuilderFactory.get("job")
.incrementer(new RunIdIncrementer())
.flow(step1())
.end()
.build();
}
}
```
在上面的示例中,ItemReader 通过 JdbcCursorItemReader 实现,从数据库中读取 person 表中的数据。ItemProcessor 通过 PersonItemProcessor 实现,将读取到的数据进行一些处理,并返回处理后的 Person 对象。ItemWriter 通过 JdbcBatchItemWriter 实现,将处理后的 Person 对象写入到 processed_person 表中。在 Step 中,我们将 ItemReader、ItemProcessor 和 ItemWriter 组装起来,通过 chunk() 方法设置每次处理的数据量,最终形成一个完整的 Job。
阅读全文