Spring Batch之XML文件操作
来源:互联网 发布:自学java工作 知乎 编辑:程序博客网 时间:2024/06/06 04:12
在看本篇博客之前,希望您能先到http://xuanmeiku.taobao.com去转转,里面全是真皮炫美酷时尚女鞋,价格实惠!如果你看中了哪一款,可以加我qq1074992674,或者直接通过旺旺联系我!欢迎大家的骚扰!本人诚信经营,绝不做欺骗他人的事情!
本文主要运用Spring Batch对XML文件的读写操作。实例流程是从一个XML文件中读取商品信息,经过简单的处理,写入另外一个XML文件中。
工程结构如下图:
pom.xml文件内容如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>springbatch</groupId> <artifactId>springbatch-xml</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>springbatch-xml</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.batch</groupId> <artifactId>spring-batch-core</artifactId> <version>2.2.2.RELEASE</version> </dependency> <dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</artifactId><version>3.2.4.RELEASE</version></dependency> </dependencies></project>applicationContext.xml的文件内容如下:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"default-autowire="byName"><context:component-scan base-package="cn.lichunan.springbatch"></context:component-scan><!-- 启动job --><bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher"><property name="jobRepository" ref="jobRepository"></property></bean><!-- 提供持久化操作 --> <bean id="jobRepository" class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean"></bean> <!-- 提供事物管理操作 --> <bean id="transactionManager" class="org.springframework.batch.support.transaction.ResourcelessTransactionManager"></bean></beans>batch.xml的文件内容如下:
<?xml version="1.0" encoding="UTF-8"?><bean:beans xmlns="http://www.springframework.org/schema/batch" xmlns:bean="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsdhttp://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.2.xsdhttp://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util.xsd"><bean:import resource="applicationContext.xml"/><job id="xmlFileReadAndWriterJob"><step id="xmlFileReadAndWriterStep"><tasklet><chunk reader="xmlReader" writer="xmlWriter" processor="xmlProcessor" commit-interval="10"></chunk></tasklet></step></job><!-- XML文件读取 --><bean:bean id="xmlReader" class="org.springframework.batch.item.xml.StaxEventItemReader" scope="step"><bean:property name="fragmentRootElementName" value="goods"></bean:property><bean:property name="unmarshaller" ref="tradeMarshaller"></bean:property><bean:property name="resource" value="file:#{jobParameters['inputFilePath']}"></bean:property></bean:bean><!-- XML文件写入 --><bean:bean id="xmlWriter" class="org.springframework.batch.item.xml.StaxEventItemWriter" scope="step"><bean:property name="rootTagName" value="wanggc"></bean:property><bean:property name="marshaller" ref="tradeMarshaller"></bean:property><bean:property name="resource" value="file:#{jobParameters['outputFilePath']}"></bean:property></bean:bean><bean:bean id="tradeMarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller"><bean:property name="aliases"><util:map id="aliases"><bean:entry key="goods" value="cn.lichunan.springbatch.pojo.Goods"></bean:entry><bean:entry key="buyDay" value="java.util.Date"></bean:entry></util:map></bean:property></bean:bean></bean:beans>此Job中包含一个Step,Step中包含了基本的读(xmlReader)、处理(xmlProcessor)、写(xmlWriter)。
对XML的读是由SpringBatch提供的StaxEventItemReader类来完成。要读取一个XML文件,首先要知道这个文件的存放路径,resource属性就是指定文件路径信息的。知道了文件路径,还需要知道要读取的XML的根节点名称,fragmentRootElementName属性就是指定根节点名称的。知道了根节点名称,还需要知道的一点就是怎么解析这个节点信息,unmarshaller就负责完成解析节点信息,并映射成程序pojo对象。注意,根节点并不是指整个XML文件的根节点,而是指要读取的信息片段的根节点,不管这个节点片段处在哪一层,框架都会遍历到。
配置了解析XML节点信息的unmarshaller。其中entry的key指定对应根节点名称goods,value指定程序的pojo类,这样,程序就可以将goods节点下的子节点与pojo类(Goods)中的属性去匹配,当匹配到子节点名与pojo类中的属性名相同时,就会将子节点的内容赋值给pojo类的属性。这样就完成了一个根节点的读取,框架会控制循环操作,直到将文件中所有根(goods)节点全部读完为止。这样就完成了XML文件的读操作。
与读XML文件一样,要写一个XML文件,也是需要知道这个文件的文件的存放路径的,同样是resource属性提供文件的路径信息。同时,也是需要知道这个文件的跟节点信息的,rootTagName属性提供根节点名信息。注意此处的根节点,指整个文件的跟节点,与读得时候稍有区别,从两个属性的名称上也可以看出。有了上面的信息,完成一个写操作,还需要一个把pojo对象转换成XML片段的工具,由marshaller提供。本文读操作的unmarshaller和写操作的marshaller用的是同一个转换器,因为XStreamMarshaller既提供将节点片段转换为pojo对象功能,同时又提供将pojo对象持久化为xml文件的功能。如果写的内容与读得内容有很大差异,可以另外配置一个转换器。
batch.xml文件配置的对XML文件的读写操作,至于读出来的信息做怎么样的处理再写入文件,通过简单的配置恐怕就无法完成了,就需要我们自己写代码完成了。XMLProcessor类就是完成这个工作的。只要在Job的配置文件中指定到这个类就可以了。
XMLProcessor的内容如下:
package cn.lichunan.springbatch.processor;import java.util.Date;import org.springframework.batch.item.ItemProcessor;import org.springframework.stereotype.Component;import cn.lichunan.springbatch.pojo.Goods;/** * XML文件处理类 * @author soft * */@Component("xmlProcessor")public class XMLProcessor implements ItemProcessor<Goods, Goods>{/** * XML文件内容处理 */public Goods process(Goods goods) throws Exception {//购入日期变更goods.setBuyDay(new Date());//顾客信息变更goods.setCustomer(goods.getCustomer() + "顾客!");//ISIN变更goods.setIsin(goods.getIsin() + "IsIn");//价格变更goods.setPrice(goods.getPrice() + 1000.112);//数量变更goods.setQuantity(goods.getQuantity() + 100);return goods;}}
工程结构图中的XMLLaunch类用来启动Job。内容如下:
package cn.lichunan.springbatch.launch;import org.springframework.batch.core.Job;import org.springframework.batch.core.JobExecution;import org.springframework.batch.core.JobParametersBuilder;import org.springframework.batch.core.launch.JobLauncher;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class XMLLaunch {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("batch.xml");JobLauncher launcher = (JobLauncher) context.getBean("jobLauncher");Job job = (Job) context.getBean("xmlFileReadAndWriterJob");try {JobExecution result = launcher.run(job,new JobParametersBuilder().addString("inputFilePath","E:\\workspace-springbatch\\springbatch-xml\\src\\main\\resource\\input.xml").addString("outputFilePath","E:\\workspace-springbatch\\springbatch-xml\\src\\main\\resource\\output.xml").toJobParameters());// 运行结果输出System.out.println(result.toString());} catch (Exception e) {e.printStackTrace();}}}其中为Job提供的两个动态参数,以及在配置文件中的用法。
pojo类Goods的内容如下:
package cn.lichunan.springbatch.pojo;import java.util.Date;/** * 商品信息类 * * @author soft * */public class Goods {/** isin号 */private String isin;/** 数量 */private int quantity;/** 价格 */private double price;/** 客户 */private String customer;/** 购入日期 */private Date buyDay;public String getIsin() {return isin;}public void setIsin(String isin) {this.isin = isin;}public int getQuantity() {return quantity;}public void setQuantity(int quantity) {this.quantity = quantity;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public String getCustomer() {return customer;}public void setCustomer(String customer) {this.customer = customer;}public Date getBuyDay() {return buyDay;}public void setBuyDay(Date buyDay) {this.buyDay = buyDay;}}
input.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?><ROOT><goods><isin>SN100001</isin><quantity>1000</quantity><price>200.20</price><customer>ZhangSan</customer></goods></ROOT>
output.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?><wanggc><goods><isin>SN100001IsIn</isin><quantity>1100</quantity><price>1200.312</price><customer>ZhangSan顾客!</customer><buyDay>2013-10-12 16:02:04.484 CST</buyDay></goods></wanggc>
- Spring Batch之XML文件操作
- Spring Batch 之 Sample(XML文件操作)(五)
- Spring Batch 之 Sample(XML文件操作)(五)
- Spring Batch 之 Sample(XML文件操作)(五)
- Spring Batch 之 Sample(XML文件操作)(五)
- Spring Batch 之 Sample(XML文件操作)(五)
- spring batch(xml文件读写)
- Spring Batch 之 Sample(CSV文件操作)(四)
- Spring Batch 之 Sample(CSV文件操作)(四)
- Spring Batch 之 Sample(CSV文件操作)(四)
- Spring Batch 之 Sample(CSV文件操作)(四)
- Spring Batch 之 Sample(CSV文件操作)(四)
- Spring Batch 之 Sample(CSV文件操作)(四)
- Spring Batch之FlatFile操作
- Spring batch 之操作数据库
- Spring Batch入门实例教程实现对CVS文件的操作
- Spring Batch 之 Spring Batch 简介(一)
- Spring Batch 之 Spring Batch 简介(一)
- Makefile.delta-intel
- 基于Flex的三维实景地图产品 HuntMap v1.3 正式发布,并在项目中应用
- How to Host a Cydia™ Repository
- C#通过线程实现回调方法
- 字符串转换为对象,然后对象转换为json串
- Spring Batch之XML文件操作
- oracle 记录被另一个用户锁住
- ACE+gSOAP实现高性能WebService Server(C/C++)
- 基于Flex的三维实景地图组件 HMap V3.0已经发布,并在项目中应用
- COJ 1151 STL中的stack每日一水
- Ubuntu12.04 设置root账号
- 使用nextInt()等接受输入时必须注意换行符的输入
- 设置表格每行的单元格的过滤条件都不同
- 给初学编程解题没思路的学生的建议