當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringBatch 读取xml文件(StaxEventItemReader)用法(十三)
生活随笔
收集整理的這篇文章主要介紹了
SpringBatch 读取xml文件(StaxEventItemReader)用法(十三)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、pom文件引入需要讀取xml文件jar包
- 二、抽取讀取xml文件公共reader
- 三、processor
- 四、配置讀取xml文件job
- 五、執行job
前言:在一些業務場景中,可能需要讀取xml文件,做業務邏輯處理,SpringBatch已經幫我們封裝好了讀取xml的reader
SpringBatch其它文章直通車:
- SpringBatch讀單個文件(FlatFileItemReader)和寫單個文件(FlatFileItemWriter)(一)
- SpringBatch順序讀取多文件(MultiResourceItemReader)和順序寫文件(MultiResourceItemWriter)(二)
- SpringBatch讀數據庫(MyBatisPagingItemReader)(三)
- SpringBatch讀文件(FlatFileItemReader)寫據庫(MyBatisBatchItemWriter)(四)
- SpringBatch 監聽器之Job監聽器(JobExecutionListener)和Step監聽器(StepExecutionListener)(五)
- SpringBatch 監聽器之Chunk監聽器(ChunkListener)和Skip監聽器(SkipListener)(六)
- SpringBatch 多線程(TaskExecutor)啟動Job詳解 (七)
- SpringBatch 配置并行啟動Job詳解 (八)
- SpringBatch 批處理分區(Partitioner )分片(九)
- SpringBatch tasklet實現和用法(十)
- SpringBatch 讀取JSON(JsonItemReader)用法(十一)
- SpringBatch 寫文件JSON(JsonFileItemWriter)用法(十二)
代碼已上傳GitHub上面地址:git源碼地址
一、pom文件引入需要讀取xml文件jar包
<dependency><groupId>com.thoughtworks.xstream</groupId><artifactId>xstream</artifactId><version>1.4.11.1</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-oxm --><dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</artifactId><version>5.1.9.RELEASE</version></dependency>二、抽取讀取xml文件公共reader
Spring Batch為讀取XML記錄、將它們映射到Java對象以及將Java對象寫入XML記錄提供了事務基礎設施。
StAX API用于I/O,因為其他標準XML解析API不適合批處理需求(DOM一次將整個輸入加載到內存中,SAX通過允許用戶只提供回調來控制解析過程)。
我們需要考慮XML輸入和輸出如何在Spring批處理中工作。首先,有一些概念與文件讀取和寫入不同,但在Spring批處理XML過程中是常見的。在XML處理中,假設XML資源是與單個記錄對應的“片段”集合,而不是需要標記的記錄行(FieldSet實例)
官方原圖片段集合
三、processor
package com.sl.processor;import com.sl.common.CommonProcessor; import com.sl.entity.CafeCat; import com.sl.entity.Cat; import org.springframework.batch.core.configuration.annotation.StepScope; import org.springframework.stereotype.Component;/*** @author shuliangzhao* @Title: CatXmlProcessor* @ProjectName spring-boot-learn* @Description: TODO* @date 2019/9/19 19:56*/ @Component @StepScope public class CatXmlProcessor extends CommonProcessor<Cat, CafeCat> {@Overridepublic void processor(CafeCat o, Cat cat) {o.setCatname(cat.getCatname());o.setCatage(cat.getCatage());o.setCataddress(cat.getCataddress());} }四、配置讀取xml文件job
package com.sl.config;import com.sl.common.CommonFileItemWriter; import com.sl.common.CommonXmlReader; import com.sl.entity.CafeCat; import com.sl.entity.Cat; import com.sl.processor.CatXmlProcessor; 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; import org.springframework.oxm.xstream.XStreamMarshaller;import java.util.HashMap; import java.util.Map;/*** xml解析* @author shuliangzhao* @Title: CatXmlConfiguration* @ProjectName spring-boot-learn* @Description: TODO* @date 2019/9/19 19:53*/ @Configuration @EnableBatchProcessing public class CatReadXmlConfiguration {@Autowiredprivate JobBuilderFactory jobBuilderFactory;@Autowiredprivate StepBuilderFactory stepBuilderFactory;@Autowiredprivate CatXmlProcessor catXmlProcessor;@Beanpublic Job catReadXmlJob() {return jobBuilderFactory.get("catReadXmlJob").start(catReadXmlStep()).build();}@Beanpublic Step catReadXmlStep() {return stepBuilderFactory.get("catReadXmlStep").<Cat, CafeCat>chunk(10).reader(catCommonXmlReader()).processor(catXmlProcessor).writer(cafeCatXmlCommonFileItemWriter()).build();}@Bean@StepScopepublic CommonXmlReader<Cat> catCommonXmlReader() {CommonXmlReader commonXmlReader = new CommonXmlReader(Cat.class);commonXmlReader.setUnmarshaller(tradeMarshaller());return commonXmlReader;}@Beanpublic XStreamMarshaller tradeMarshaller() {Map<String, Class> aliases = new HashMap<>();aliases.put("cat", Cat.class);aliases.put("id", Integer.class);aliases.put("catname", String.class);aliases.put("catage", String.class);aliases.put("cataddress", String.class);XStreamMarshaller marshaller = new XStreamMarshaller();marshaller.setAliases(aliases);return marshaller;}@Bean@StepScopepublic CommonFileItemWriter<CafeCat> cafeCatXmlCommonFileItemWriter() {return new CommonFileItemWriter<>(CafeCat.class);}}注意:在本例中,我們選擇使用XStreamMarshaller,它接受作為映射傳入的別名,其中第一個鍵和值是片段(即根元素)的名稱和要綁定的對象類型。然后,與FieldSet類似,將映射到對象類型中的字段的其他元素的名稱描述為映射中的鍵/值對。
五、執行job
寫出csv文件:
總結
以上是生活随笔為你收集整理的SpringBatch 读取xml文件(StaxEventItemReader)用法(十三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBatch 写文件JSON(
- 下一篇: SpringBatch 写xml文件(S