系列文章第四篇,学习一下 spring batch 的两个重要的功能,读数据(Reader)和写数据(Writer) 。
第一篇文章的传送门: Spring batch系列文章(一)—— 介绍和入门
第二篇的文章传送门: Spring batch系列文章(二)—— 核心api
第三篇的文章传送门: Spring batch系列文章(三)—— 决策器和监听器
读取数据
读取数据库的数据
读取数据库的数据很简单,框架提供了很多实现好的 ItemReader 类,其中有个 JdbcPagingItemReader 就是专门用来读取数据库的数据的。
首先准备数据库并插入数据
create table user(
id int PRIMARY key auto_increment,
username varchar(30),
password varchar(30),
age int);
insert into user(username,password,age) values ('zhangsan','111',20);
insert into user(username,password,age) values ('lisi','222',21);
insert into user(username,password,age) values ('wangwu','333',23);
insert into user(username,password,age) values ('zhaoliu','444',26);
执行脚本得到数据库:
为了方便展示,我把 job,step,reader,writer 都写在了一个类里,开发时肯定要进行分开编写方便阅读也增加可重用性。
首先创建任务和步骤,这些过程和之前没什么不同,因为要使用 reader,所以在 step 创建的时候,需要使用 chunk,这是关键代码:
@Bean
public Step itemReaderDBStep() {
return stepBuilderFactory.get("itemReaderDBStep")
.<User,User>chunk(1)
.reader(dbItemReader())
.writer(dbItemWriter())
.build();
}
dbItemReader 和 dbItemWriter 方法分别提取出来:
@Bean
public JdbcPagingItemReader<User> dbItemReader() {
JdbcPagingItemReader jdbcPagingItemReader = new JdbcPagingItemReader();
jdbcPagingItemReader.setDataSource(dataSource);
jdbcPagingItemReader.setFetchSize(2);
jdbcPagingItemReader.setRowMapper((rs, rowNum) -> {
User user = new User();
user.setId(rs.getInt(1)