Spring Batch ItemProcessor组件

您所在的位置:网站首页 stepbystep1答案 Spring Batch ItemProcessor组件

Spring Batch ItemProcessor组件

2023-02-22 14:22| 来源: 网络整理| 查看: 265

目录

引言

概念

默认ItemProcessor

ValidatingItemProcessor:校验处理器

ItemProcessorAdapter:适配器处理器

ScriptItemProcessor:脚本处理器

CompositeItemProcessor:组合处理器

自定义ItemProcessor处理器

转视频版

引言

接着上篇:Spring Batch ItemReader组件-读数据库 了解Spring Batch ItemReader读组件后,接下来一起学习一下Spring Batch 数据处理组件:ItemProcessor

概念

前面我们多次讲过,居于块的读与写,中间还夹着一个ItemProcessor 条目处理。当我们通过ItemReader 将数据读取出来之后,你面临2个选择:

1>直接将数据转向输出

2>对读入的数据进行再加工。

如果选择第一种,那ItemProcessor 可以不用出现,如果选择第二种,就需要引入ItemProcessor 条目处理组件啦。

Spring Batch 为ItemProcessor提供默认的处理器与自定义处理器2种模式以满足各种需求。

默认ItemProcessor

Spring Batch 提供现成的ItemProcessor 组件有4种:

ValidatingItemProcessor:校验处理器 ItemProcessorAdapter:适配器处理器 ScriptItemProcessor:脚本处理器 CompositeItemProcessor:组合处理器 ValidatingItemProcessor:校验处理器

这个好理解,很多时候ItemReader读出来的数据是相对原始的数据,并没有做过多的校验

数据文件users-validate.txt

1##18 2##16 3#laofei#20 4#zhongfei#19 5#feifei#15

比如上面文本数据,第一条,第二条name数值没有指定,在ItemReader 读取之后,必定将 "" 空串封装到User name属性中,语法上没有错,但逻辑上可以做文章,比如:用户名不为空。

解决上述问题,可以使用Spring Batch 提供ValidatingItemProcessor 校验器处理。

接下来我们看下ValidatingItemProcessor 怎么实现

1>导入校验依赖

org.springframework.boot spring-boot-starter-validation

2>定义实体对象

@Getter @Setter @ToString public class User { private Long id; @NotBlank(message = "用户名不能为null或空串") private String name; private int age; }

3>实现

package com.langfeiyes.batch._26_itemprocessor_validate; 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.ItemWriter; import org.springframework.batch.item.file.FlatFileItemReader; import org.springframework.batch.item.file.builder.FlatFileItemReaderBuilder; import org.springframework.batch.item.validator.BeanValidatingItemProcessor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.core.io.ClassPathResource; import org.springframework.util.StringUtils; import java.util.List; @SpringBootApplication @EnableBatchProcessing public class ValidationProcessorJob { @Autowired private JobBuilderFactory jobBuilderFactory; @Autowired private StepBuilderFactory stepBuilderFactory; @Bean public FlatFileItemReader userItemReader(){ return new FlatFileItemReaderBuilder() .name("userItemReader") .resource(new ClassPathResource("users-validate.txt")) .delimited().delimiter("#") .names("id", "name", "age") .targetType(User.class) .build(); } @Bean public ItemWriter itemWriter(){ return new ItemWriter() { @Override public void write(List


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3