/**
* @program: demo-spring-batch
* @description
* 从数据库读数据
* @author: tina.liu
* @create: 2020-04-28 08:01
**/
@Configuration
@EnableBatchProcessing
public class Fromdb {
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Autowired
private DataSource dataSource; //自动注入数据源
@Autowired
@Qualifier(value = "fromdbWriter")
private FromdbWriter fromdbWriter;
/**
* 创建一个job
* @return
*/
@Bean(value = "fromdbJob1")
public Job fromdbJob1(){
return jobBuilderFactory.get("fromdbJob1")
.start(fromdbStep1())
.build();
}
/**
* 创建一个step
* @return
*/
@Bean(value = "fromdbStep1")
public Step fromdbStep1() {
return stepBuilderFactory.get("fromdbStep1")
.<User,User>chunk(2)
.reader(fromdbReader())
.writer(fromdbWriter)
.build();
}
/**
* 定义一个reader
* @return
*/
@Bean
public JdbcPagingItemReader<User> fromdbReader() {
JdbcPagingItemReader<User> reader = new JdbcPagingItemReader<>();
//注入数据源
reader.setDataSource(dataSource);
//设置一次读取几条数据
reader.setFetchSize(2);
//将读取的记录转成user对象
reader.setRowMapper(new RowMapper<User>() {
@Override
public User mapRow(ResultSet rs, int i) throws SQLException {
User user = new User();
user.setId(rs.getString(1));
user.setName(rs.getString(2));
user.setAge(rs.getString(3));
return user;
}
});
//如何指定sql语句
MySqlPagingQueryProvider provider = new MySqlPagingQueryProvider();
provider.setSelectClause("id,name,age");
provider.setFromClause("from t_user");
//如何根据哪个字段排序
Map<String, Order> sort = new LinkedHashMap(1);
sort.put("id", Order.ASCENDING); // 根据ID升序
provider.setSortKeys(sort);
reader.setQueryProvider(provider);
return reader;
}
}
//创建一个类
@Component(value = "fromdbWriter")
class FromdbWriter implements ItemWriter<User>{
@Override
public void write(List<? extends User> list) throws Exception {
for (User user:list) {
System.out.println("user的值为:"+user);
}
}
}
@Data
public class User {
private String id;
private String name;
private String age;
}
网友评论