SpringBatch - Validate, 竟然敢摸清华女学生

前言

清华美院一名女学生称男同学通过包的掩护摸自己的 PP 并将男同学的身份信息公开到社交媒体, 导致男同学险些社会性死亡, 后来查了监控才证明了男同学的清白.

Spring Batch 可校验性

我们经常需要大量的读取数据, 其中有些数据可能不符合我们的预期, 比如从接口读了个用户列表, 年龄字段存在负数, 这种可能就需要中断程序或者跳过处理, 接着处理下一条

Spring Batch 可校验性例子

reader 和 writer 都是原来的, 我们重新写个 processor:

@Component

publicclassQingGirlProcessorimplementsItemProcessor{

@Override

publicStringprocess(Girl girl)throwsException{

returngirl.getName() +"说被摸了PP";

}

}

使用组合将验证的 processor 和上面的业务的 processor 串联起来:

@Configuration

publicclassProcessorConfig{

@Autowired

privateQingGirlProcessor qingGirlProcessor;

@Bean

publicBeanValidatingItemProcessorgirlBeanValidatingItemProcessor()throwsException{

BeanValidatingItemProcessor validator =newBeanValidatingItemProcessor<>();

validator.setFilter(true);

validator.afterPropertiesSet();

returnvalidator;

}

@Bean

publicItemProcessorgirlStringItemProcessor()throwsException{

List list =newArrayList<>();

list.add(girlBeanValidatingItemProcessor());

list.add(qingGirlProcessor);

CompositeItemProcessor compositeItemProcessor =

newCompositeItemProcessor<>();

compositeItemProcessor.setDelegates(list);

compositeItemProcessor.afterPropertiesSet();

returncompositeItemProcessor;

}

}

任务配置:

finalString JOB_NAME ="demo4QingGirl";

List girlList =newArrayList<>();

for(inti =0; i <10; i++) {

girlList.add(i %2==0?newGirl() :newGirl("唐*靖"));

}

finalListReader reader =newListReader<>(girlList);

finalJob girlJob = jobBuilderFactory.get(JOB_NAME)

.flow(stepBuilderFactory.get(JOB_NAME)

.chunk(2).reader(reader)

.processor(girlStringItemProcessor).writer(printWriter).build())

.end().build();

jobLauncher.run(girlJob,newJobParametersBuilder()

.addDate("start_time",newDate()).toJobParameters());

输出:

唐*靖说被摸了PP

唐*靖说被摸了PP

唐*靖说被摸了PP

唐*靖说被摸了PP

唐*靖说被摸了PP

总共十个只输出了五个这就是我们的 Girl 类的作用了:

@Data

@AllArgsConstructor

@NoArgsConstructor

publicclassGirl{

@NotBlank

privateString name;

}

这样就能保证只处理符合预期的数据了

你可能感兴趣的:(SpringBatch - Validate, 竟然敢摸清华女学生)