数据处理——实现数据过滤

实现spring batch中的ItemProcessor接口,并重写接口中的process方法来实现数据过滤。

示例:从一个list源中读取数据,只过滤出与”A”差值大于10的数据。

1、该作业配置如下:

import java.util.Arrays;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.support.ListItemReader;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@EnableBatchProcessing
@Configuration
public class BatchConfig {

    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    @Autowired
    private JobBuilderFactory jobBuilderFactory;

    @Value("${spring.batch.chunk.size:3}")
    private int chunkSize; //5

    /*1、创建一个Job作业*/
    @Bean
    public Job itemProcessJob(){
        return jobBuilderFactory.get("ItemProcessJob")
        .start(chunkStep())
        .build();
    }

    //2、创建一个step*/
    /*list源中存的数据都是String类型的,所以输入是String类型的;过滤出满足条件的数据转化为小写字符,也是String类型,所以输出也是String类型的*/
    @Bean
    public Step chunkStep(){
        return stepBuilderFactory.get("chunkStep")
                .<String, String>chunk(chunkSize)   //<String, String>表示输入是String类型,输出是String类型,不加会报错类型不匹配                           
                .reader(listReader())
                .processor(itemProcess())
                .writer(list -> list.forEach(System.out::println))
                .allowStartIfComplete(true)
                .build();
    }

    //读
    @Bean
    public ItemReader<String> listReader(){
        return new ListItemReader<>(Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I",
                "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T"));
    }

    //处理
    @Bean
    public ItemProcessor<String, String> itemProcess(){
        return new LowerCaseItemProcess();
    }

    /*处理程序中,输入的是String类型, 输出的是String类型*/
    private class LowerCaseItemProcess implements ItemProcessor<String, String>{
        @Override
        /*item表示输入的值*/
        public String process(String item) throws Exception {
            if (item.compareTo("A") <= 10) {
                return null;    //返回空
            }
            String output = item.toLowerCase(); //把大写字母转化为小写字母
            return output;      //返回非空结果
        }

    }

}

运行作业,输出结果如下:

……省略日志
l
m
n
o
p
q
r
s
t

只过滤出了满足条件的数据。

2、如果读取的list数据源中数据改为如下:

//读
    @Bean
    public ItemReader<String> listReader(){
        return new ListItemReader<>(Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I",
                "J", "K", "L", "M", "N", "O", "P", "Q", null, "R", "S", "T"));
    }
在"Q"字符的后面是个null,当spring batch读到此处时就会退出,表示读取完毕。Spring batch读取结束的条件就是null。

重新运行作业,输出日志如下:

……省略日志
l
m
n
o
p
q
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值