文章目录

  • 一、pom文件引入需要读取xml文件jar包
  • 二、抽取写xml文件公共writer
  • 三、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)用法(十二)
  • SpringBatch 读取xml文件(StaxEventItemReader)用法(十三)

代码已上传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文件公共writer

输出与输入是对称的。StaxEventItemWriter需要一个资源、一个编组程序和一个rootTagName。Java对象被传递给编组程序(通常是标准的Spring OXM编组程序),编组程序使用自定义事件编写器来过滤OXM工具为每个片段生成的StartDocument和EndDocument事件,从而向资源写入。

package com.sl.common;import org.springframework.batch.item.xml.StaxEventItemWriter;
import org.springframework.core.io.FileSystemResource;
import org.springframework.oxm.Marshaller;/*** 公共写xml文件* @author shuliangzhao* @Title: CommonXmlWriter* @ProjectName spring-boot-learn* @Description: TODO* @date 2019/9/20 18:46*/
public class CommonXmlWriter<T> extends StaxEventItemWriter<T> {public CommonXmlWriter(Marshaller marshaller,Class clz) {setName("commonXmlWriter");setMarshaller(marshaller);setResource(new FileSystemResource("D:\\aplus\\shuqian\\source\\"+ clz.getSimpleName() + ".xml"));setRootTagName("cat");setOverwriteOutput(true);}
}

前面的配置设置了三个必需的属性,并设置了可选的overwriteOutput=true属性,该属性在本章前面提到,用于指定是否可以覆盖现有文件。配置编辑器

 @Beanpublic XStreamMarshaller tradeXmlMarshaller() {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;}

三、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: CatProcessor* @ProjectName spring-boot-learn* @Description: TODO* @date 2019/9/10 20:13*/
@Component
@StepScope
public class CatProcessor extends CommonProcessor<CafeCat, Cat> {@Overridepublic void processor(Cat o, CafeCat cafeCat) {o.setCataddress(cafeCat.getCataddress());o.setCatage(cafeCat.getCatage());o.setCatname(cafeCat.getCatname());}
}

四、配置写xml文件job

package com.sl.config;import com.sl.common.CommonFileItemReader;
import com.sl.common.CommonXmlWriter;
import com.sl.entity.CafeCat;
import com.sl.entity.Cat;
import com.sl.processor.CatProcessor;
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: CafeXmlWriterConfiguration* @ProjectName spring-boot-learn* @Description: TODO* @date 2019/9/20 18:50*/
@Configuration
@EnableBatchProcessing
public class CafeXmlWriterConfiguration {@Autowiredprivate JobBuilderFactory jobBuilderFactory;@Autowiredprivate StepBuilderFactory stepBuilderFactory;@Autowiredprivate CatProcessor catProcessor;@Beanpublic Job cafeXmlCatJob() {return jobBuilderFactory.get("cafeXmlCatJob").start(cafeXmlCatStep()).build();}@Beanpublic Step cafeXmlCatStep() {return stepBuilderFactory.get("cafeXmlCatStep").<CafeCat, Cat>chunk(10).reader(cafeCatXmlCommonFileItemReader()).processor(catProcessor).writer(commonXmlWriter()).build();}@Bean@StepScopepublic CommonFileItemReader<CafeCat> cafeCatXmlCommonFileItemReader() {return new CommonFileItemReader<>(CafeCat.class);}@Bean@StepScopepublic CommonXmlWriter commonXmlWriter() {return new CommonXmlWriter(tradeXmlMarshaller(),Cat.class);}@Beanpublic XStreamMarshaller tradeXmlMarshaller() {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;}}

五、执行job

写出xml文件:

SpringBatch 写xml文件(StaxEventItemWriter)用法(十四)相关推荐

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

    文章目录 一.pom文件引入需要读取xml文件jar包 二.抽取读取xml文件公共reader 三.processor 四.配置读取xml文件job 五.执行job 前言:在一些业务场景中,可能需要读 ...

  2. mysql的高阶用法_MySQL的经典用法(十四)-高级优化

    mysql的经典用法(十四)----高级优化 基于 /application/search/mysql/mysql-5.5.28/support-files/my-innodb-heavy-4G.cn ...

  3. vs2017、C++、循环遍历数组完成写XML文件 完整版

    新手小白,请多多指教哦! 这篇文章就是写XML文件的完整版啦.上一篇文章是我在完成整个程序遇到的问题和解决办法. 文章目的:循环遍历vector数组,完成写XML文件 之前的两篇文章写了读取XML文件 ...

  4. tinyxml 读取文本节点_【C++】【TinyXml】xml文件的读写功能使用——写xml文件

    TinyXml工具是常用比较简单的C++中xml读写的工具 需要加载 #include "TinyXml\tinyxml.h" 在TinyXML中,根据XML的各种元素来定义了一些 ...

  5. 【C++】【TinyXml】xml文件的读写功能使用——写xml文件

    TinyXml工具是常用比较简单的C++中xml读写的工具 需要加载 #include "TinyXml\tinyxml.h" 在TinyXML中,根据XML的各种元素来定义了一些 ...

  6. 02_Android写xml文件和读xml文件

     新建Android项目 编写AndroidManifest.xml,使本Android项目具有单元测试功能和写外设的权限. <?xml version="1.0" en ...

  7. PLSQL_PLSQL读和写XML文件方式(案例)

    2012-05-01 Created By BaoXinjian 一.写XML文件 Step1. 创建测试目录 --创建测试目录 CREATE OR REPLACE DIRECTORY bxjxml ...

  8. 使用TinyXML读/写XML文件

    1.TinyXML 引用网上的原话:TinyXML是目前非常流行的一款基于DOM模型的XML解析器,简单易用且小巧 玲珑,非常适合存储简单数据,配置文件,对象序列化等数据量不是很大的操作.支持对XML ...

  9. java dom4j 写xml文件_Java实现——Dom4j读写XML文件

    1. dom4j概述 解析DOM4J是一个开源XML解析包,采用了Java集合框架并完全支持DOM,SAX和JAXP. 最大的特色是使用了大量的接口,主要接口都在org.dom4j里定义. 2. do ...

最新文章

  1. Python 精要参考(第二版) 第六章 函数与函数编程
  2. 机器学习基础专题:随机变量
  3. 手把手教你在Windows10环境下安装深度学习框架(pytorch or tensorflow)
  4. Mybatis+mysql动态分页查询数据案例——条件类(HouseCondition)
  5. QEBA:基于类边界查询访问的黑盒攻击
  6. 树莓派 串口如何使用 以及树莓派引脚对照表
  7. Vba实现工作薄和工作表密码破解
  8. 自己写的基金投资分析系统,这只基你们觉得怎么样?
  9. linux数据异地备份,linux异地实时备份
  10. truffle init error,unbox Downloading报错问题
  11. 办公逸CTO王斌:提高产品响应速度应注意的二十五个技术细节
  12. unity3d发布webgl手机测试流程
  13. 罗马数字与十进制数字对应生成(1-3999)
  14. 删除任务栏锁定,任务栏图标的位置,查找可行性文件的方式
  15. docker修改服务器参数怎么办,Docker(32)- 如何修改 docker 容器的启动参数
  16. 2006年日语一级听力原文
  17. python 1014 福尔摩斯的约会 (20 分)
  18. 全国高校计算机专业,全国高校计算机专业排名
  19. 怎样把音乐存到计算机里,如何把CD光盘中的歌曲复制到电脑
  20. Excel的内容进行比较工具:Beyond Compare 3.X

热门文章

  1. python文件传输模块_如何将python对象从一个文件模块传递到另一个文件模块?
  2. java 微分方程求解_Java中的微分方程
  3. c语言 #define dpath .exe是什么意思,C语言宏定义#define
  4. Unity3D的一些坑
  5. 【论文解读】腾讯FAT | 未来感知的多样化趋势推荐框架
  6. 【学术相关】科研行业有哪些不为大众所知的内幕?
  7. 【Python基础】Pandas参数设置的八个小技巧
  8. 【算法知识】详解堆排序算法
  9. 从Excel到Python:最常用的36个Pandas函数
  10. 你真的懂你的用户吗?