怎么在Spring Batch中对框架进行处理

  • 时间:
  • 浏览:47
  • 来源:恰卡网

导读怎么在Spring Batch中对框架进行处理?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 目标1:程序随机生成字符串...

怎么在Spring Batch中对框架进行处理?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

目标1:程序随机生成字符串,经过Spring Batch后,统一在字符串后加入“----PROCESSED”,并输出

目标2:程序读取txt文件,经过Spring Batch后,统一加入如上字段,并输出

Spring Batch的流程

  • 读取数据----itemReader

  • 处理数据----itemProcess

  • 数据写入----itemWrite

分析目标可知,两个目标的输入数据源不同,处理方式基本一致,数据完成后的写入规则一致

由此可以分段完成代码

itemReader

目标一

这里没有使用Spring Batch自带的集中reader,所以自定义了随机生成字符串的reader

这里代码并不完善,reader会无线循环生成随机字符串,但不影响本次学习的目的

publicclassMyItemReaderimplementsItemReader{
@Override
publicStringread()throwsException,UnexpectedInputException,ParseException,NonTransientResourceException{
returnRandomStringUtils.randomAlphabetic(10);
}
}

目标二

由于是读取文件中的内容,所以不用自定义reader实现,可直接使用FlatFileItemReader,在Batch的config中配置即可

@Bean
publicItemReadertextReader(){

FlatFileItemReaderreader=newFlatFileItemReader<>();
Filefile=newFile("D:\\FTP\\ttest.txt");
reader.setResource(newFileSystemResource(file));
reader.setLineMapper(newLineMapper(){
@Override
publicStringmapLine(Stringline,intlineNumber)throwsException{
returnline;
}
});
returnreader;

}

itemProcess

这里采用同一种处理方式即可

publicclassMyItemProcessorimplementsItemProcessor{

@Override
publicStringprocess(Strings)throwsException{
returns+"---------PROCESSED";
}
}

itemWriter

也采用同一种即可

publicclassMyItemWriterimplementsItemWriter{
@Override
publicvoidwrite(Listitems)throwsException{
for(Stringitem:items){
System.out.println(item);
}
}
}

配置完成Batch Config

@Configuration
@EnableBatchProcessing
publicclassBatchConfigurationextendsDefaultBatchConfigurer{

@Autowired
publicStepBuilderFactorystepBuilderFactory;
@Autowired
publicJobBuilderFactoryjobBuilderFactory;

@Bean
publicMyItemProcessorprocessor(){
returnnewMyItemProcessor();
}

@Bean
publicItemWriterwriter(){
returnnewMyItemWriter();
}

@Bean
publicItemReadertextReader(){
FlatFileItemReaderreader=newFlatFileItemReader<>();
Filefile=newFile("D:\\FTP\\ttest.txt");
reader.setResource(newFileSystemResource(file));
reader.setLineMapper(newLineMapper(){
@Override
publicStringmapLine(Stringline,intlineNumber)throwsException{
returnline;
}
});
returnreader;
}

@Bean
publicItemReaderstringReader(){
returnnewMyItemReader();
}

@Override
publicvoidsetDataSource(DataSourcedataSource){
super.setDataSource(dataSource);
}

@Bean
publicStepmyStep(){
returnstepBuilderFactory
.get("step1")
//这个chunksize是最后调用写入的时候,一次性写入多少条已处理的数据
.chunk(10)
//.reader(textReader())
.reader(stringReader())
.processor(processor())
.writer(writer())
.build();

}

@Bean
publicJobMyJob(){
returnjobBuilderFactory
.get("MyJOB")
.listener(newJobExecutionListenerSupport(){
//所有处理结束后调用
@Override
publicvoidafterJob(JobExecutionjobExecution){
if(jobExecution.getStatus()==BatchStatus.COMPLETED){
System.out.println("OK");
}
}
})
.flow(myStep())
.end()
.build();
}
}

关于怎么在Spring Batch中对框架进行处理问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注恰卡网行业资讯频道了解更多相关知识。

猜你喜欢

飞利浦278E1显示器体验如何(飞利浦278E1显示器体验评测)

飞利浦278E1显示器体验如何,飞利浦278E1显示器体验评测 目前27寸显示器已经成为了市面上的主流产品。这样尺寸的显示器在桌面上,整体的观感更好,再搭配了更高的分辨率,让显示器可以显示

2021-06-22

Python(中的单分派泛函数你真的了解吗)

Python,中的单分派泛函数你真的了解吗 泛型,如果你学过Java ,应该对它不陌生吧。但你可能不知道在 Python 中(3.4+ ),也可以实现简单的泛型函数。 在Python中只能实现基于单个(第一个)参

2021-06-22

Java8新特性:函数式编程

Java8新特性:函数式编程 首先需要清楚一个概念:函数式接口;它指的是有且只有一个未实现的方法的接口,一般通过FunctionalInterface这个注解来表明某个接口是一个函数式接口。函数式接口是

2021-06-22

Python实现DBSCAN聚类算法并样例测试

Python实现DBSCAN聚类算法并样例测试 什么是聚类算法?聚类是一种机器学习技术,它涉及到数据点的分组。给定一组数据点,我们可以使用聚类算法将每个数据点划分为一个特定的组。理论上,

2021-06-22