javascript
SpringBatch顺序读取多文件(MultiResourceItemReader)和顺序写文件(MultiResourceItemWriter)(二)
文章目錄
- 一、抽取順序讀取多文件公共reader
- 二、抽取寫文件公共基于MultiResourceItemWriter
- 三、實現(xiàn)自己的ResourceSuffixCreator
- 四、讀取多文件job
- 五、運行結(jié)果
前言:上一章我們講解了SpringBatch讀取單個文件和寫文件的具體用法,這一張我們繼續(xù)講解讀取多個文件的用法。
我們在一些特殊的業(yè)務(wù)場景中,需要順序讀取多個文件,幸運的是SpringBatch已經(jīng)給我們提供了公共Reader MultiResourceItemReader
代碼已上傳GitHub上面地址:https://github.com/FadeHub/spring-boot-learn/tree/master/spring-boot-springbatch
SpringBatch其它文章直通車:
SpringBatch讀單個文件(FlatFileItemReader)和寫單個文件(FlatFileItemWriter)(一)
SpringBatch順序讀取多文件(MultiResourceItemReader)和順序?qū)懳募?MultiResourceItemWriter)(二)
SpringBatch讀數(shù)據(jù)庫(MyBatisPagingItemReader)(三)
SpringBatch讀文件(FlatFileItemReader)寫據(jù)庫(MyBatisBatchItemWriter)(四)
SpringBatch 監(jiān)聽器之Job監(jiān)聽器(JobExecutionListener)和Step監(jiān)聽器(StepExecutionListener)(五)
SpringBatch 監(jiān)聽器之Chunk監(jiān)聽器(ChunkListener)和Skip監(jiān)聽器(SkipListener)(六)
一、抽取順序讀取多文件公共reader
CommonMultiResourceItemReader繼承MultiResourceItemReader
/*** 順序讀取多個文件* @author shuliangzhao* @Title: CommonMultiResourceItemReader* @ProjectName spring-boot-learn* @Description: TODO* @date 2019/9/8 12:34*/ public class CommonMultiResourceItemReader<T> extends MultiResourceItemReader<T> {public CommonMultiResourceItemReader(Class clz) {setResources(getResource());setDelegate(new CommonFileItemReader<>(clz));}private Resource[] getResource() {List<Resource> resourceList = new ArrayList<>();String filePath = "D:\\aplus\\shuqian\\target";File file = new File(filePath);if (file.isDirectory()) {String[] list = file.list();if (list != null) {for (String str : list) {String resource = file.getPath() + "\\" + str;FileSystemResource fileSystemResource = new FileSystemResource(resource);resourceList.add(fileSystemResource);}}}Resource[] resources = new Resource[resourceList.size()];return resourceList.toArray(resources);} }敲黑板:setDelegate(new CommonFileItemReader<>(clz));這個CommonFileItemReader是上一章公共讀取單個文件的reader
二、抽取寫文件公共基于MultiResourceItemWriter
CommonMultiResourceItemWriter繼承MultiResourceItemWriter
*** @author shuliangzhao* @Title: CommonMultiResourceItemWriter* @ProjectName spring-boot-learn* @Description: TODO* @date 2019/9/8 13:05*/ public class CommonMultiResourceItemWriter<T> extends MultiResourceItemWriter<T> {public CommonMultiResourceItemWriter(Class clz) {setDelegate(new CommonFileItemWriter<>(clz));setResource(getResource(clz));setResourceSuffixCreator(new CsvResourceSuffixCreator());}private Resource getResource(Class clz) {FileSystemResource fileSystemResource = new FileSystemResource("D:\\aplus\\shuqian\\source\\" +clz.getSimpleName());return fileSystemResource;}}三、實現(xiàn)自己的ResourceSuffixCreator
CsvResourceSuffixCreator 實現(xiàn)ResourceSuffixCreator 接口
package com.sl.resource;import org.springframework.batch.item.file.ResourceSuffixCreator;/*** @author shuliangzhao* @Title: CsvResourceSuffixCreator* @ProjectName spring-boot-learn* @Description: TODO* @date 2019/9/8 13:20*/ public class CsvResourceSuffixCreator implements ResourceSuffixCreator {@Overridepublic String getSuffix(int i) {return i + ".csv" ;} }四、讀取多文件job
讀取多文件job使用上一章job改造之后的
package com.sl.config;import com.sl.common.CommonFileItemWriter; import com.sl.common.CommonMultiResourceItemReader; import com.sl.common.CommonMultiResourceItemWriter; import com.sl.entity.People; import com.sl.entity.Student; import com.sl.processor.StudentProcessor; 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.core.configuration.annotation.StepScope; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;/*** @author shuliangzhao* @Title: StudentMultiConfiguration* @ProjectName spring-boot-learn* @Description: TODO* @date 2019/9/8 12:41*/ @Configuration @EnableBatchProcessing public class StudentMultiConfiguration {@Autowiredprivate JobBuilderFactory jobBuilderFactory;@Autowiredprivate StepBuilderFactory stepBuilderFactory;@Autowiredprivate StudentProcessor studentProcessor;@Beanpublic Job studentMultiJob() {return jobBuilderFactory.get("studentMultiJob").start(studentMulitStep()).build();}@Beanpublic Step studentMulitStep() {return stepBuilderFactory.get("studentMulitStep").<People, Student>chunk(10).reader(peopleCommonMultiResourceItemReader()).processor(studentProcessor).writer(studentCommonMultiFileItemWriter()).build();}@Bean@StepScopepublic CommonMultiResourceItemReader<People> peopleCommonMultiResourceItemReader(){return new CommonMultiResourceItemReader<>(People.class);}@Bean@StepScopepublic CommonMultiResourceItemWriter<Student> studentCommonMultiFileItemWriter() {return new CommonMultiResourceItemWriter<>(Student.class);} }五、運行結(jié)果
這是讀取多文件的文件個數(shù),每個文件有10條數(shù)據(jù)
寫文件文件條數(shù)總共是30條。
以上就是MultiResourceItemReader和MultiResourceItemWriter的基本用法
總結(jié)
以上是生活随笔為你收集整理的SpringBatch顺序读取多文件(MultiResourceItemReader)和顺序写文件(MultiResourceItemWriter)(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mybatis批量插入(insert)和
- 下一篇: SpringBatch读文件(FlatF