日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

SpringBatch 读取xml文件(StaxEventItemReader)用法(十三)

發(fā)布時(shí)間:2025/1/21 javascript 87 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringBatch 读取xml文件(StaxEventItemReader)用法(十三) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 一、pom文件引入需要讀取xml文件jar包
    • 二、抽取讀取xml文件公共reader
    • 三、processor
    • 四、配置讀取xml文件job
    • 五、執(zhí)行job

前言:在一些業(yè)務(wù)場(chǎng)景中,可能需要讀取xml文件,做業(yè)務(wù)邏輯處理,SpringBatch已經(jīng)幫我們封裝好了讀取xml的reader

SpringBatch其它文章直通車(chē):

  • SpringBatch讀單個(gè)文件(FlatFileItemReader)和寫(xiě)單個(gè)文件(FlatFileItemWriter)(一)
  • SpringBatch順序讀取多文件(MultiResourceItemReader)和順序?qū)懳募?MultiResourceItemWriter)(二)
  • SpringBatch讀數(shù)據(jù)庫(kù)(MyBatisPagingItemReader)(三)
  • SpringBatch讀文件(FlatFileItemReader)寫(xiě)據(jù)庫(kù)(MyBatisBatchItemWriter)(四)
  • SpringBatch 監(jiān)聽(tīng)器之Job監(jiān)聽(tīng)器(JobExecutionListener)和Step監(jiān)聽(tīng)器(StepExecutionListener)(五)
  • SpringBatch 監(jiān)聽(tīng)器之Chunk監(jiān)聽(tīng)器(ChunkListener)和Skip監(jiān)聽(tīng)器(SkipListener)(六)
  • SpringBatch 多線(xiàn)程(TaskExecutor)啟動(dòng)Job詳解 (七)
  • SpringBatch 配置并行啟動(dòng)Job詳解 (八)
  • SpringBatch 批處理分區(qū)(Partitioner )分片(九)
  • SpringBatch tasklet實(shí)現(xiàn)和用法(十)
  • SpringBatch 讀取JSON(JsonItemReader)用法(十一)
  • SpringBatch 寫(xiě)文件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對(duì)象以及將Java對(duì)象寫(xiě)入XML記錄提供了事務(wù)基礎(chǔ)設(shè)施。
StAX API用于I/O,因?yàn)槠渌麡?biāo)準(zhǔn)XML解析API不適合批處理需求(DOM一次將整個(gè)輸入加載到內(nèi)存中,SAX通過(guò)允許用戶(hù)只提供回調(diào)來(lái)控制解析過(guò)程)。
我們需要考慮XML輸入和輸出如何在Spring批處理中工作。首先,有一些概念與文件讀取和寫(xiě)入不同,但在Spring批處理XML過(guò)程中是常見(jiàn)的。在XML處理中,假設(shè)XML資源是與單個(gè)記錄對(duì)應(yīng)的“片段”集合,而不是需要標(biāo)記的記錄行(FieldSet實(shí)例)
官方原圖片段集合

package com.sl.common;import org.springframework.batch.item.xml.StaxEventItemReader; import org.springframework.core.io.FileSystemResource;/*** @author shuliangzhao* @Title: CommonXmlReader* @ProjectName spring-boot-learn* @Description: TODO* @date 2019/9/19 19:33*/ public class CommonXmlReader<T> extends StaxEventItemReader<T> {public CommonXmlReader(Class clz) {setName("xmlReader");setResource(new FileSystemResource("D:\\aplus\\shuqian\\target\\"+clz.getSimpleName()+".xml"));setFragmentRootElementName("cat");} }

三、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,它接受作為映射傳入的別名,其中第一個(gè)鍵和值是片段(即根元素)的名稱(chēng)和要綁定的對(duì)象類(lèi)型。然后,與FieldSet類(lèi)似,將映射到對(duì)象類(lèi)型中的字段的其他元素的名稱(chēng)描述為映射中的鍵/值對(duì)。

五、執(zhí)行job

寫(xiě)出csv文件:

與50位技術(shù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的SpringBatch 读取xml文件(StaxEventItemReader)用法(十三)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。