美文网首页
spring batch -->从数据库读取数据

spring batch -->从数据库读取数据

作者: 刘小刀tina | 来源:发表于2020-04-28 08:41 被阅读0次

/**
 * @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;
    
}

相关文章

网友评论

      本文标题:spring batch -->从数据库读取数据

      本文链接:https://www.haomeiwen.com/subject/fopmwhtx.html