- 浏览: 160857 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (95)
- oracle (7)
- java 基础 (10)
- web层 (3)
- 框架技术 (0)
- eclipse技巧 (2)
- 重构 (2)
- 架构 (1)
- 缓存 (11)
- 分布式多线程编程 (5)
- jquery (8)
- ibatis (3)
- spring API (1)
- maven (1)
- spring (4)
- js (12)
- 正则表达式 (1)
- Velocit (1)
- 杂七杂八 (3)
- XSS跨域攻击 (1)
- appfuse (2)
- Simple-Spring-Memcached (3)
- spring batch (11)
- spring integration (2)
- Teiid 8.0 (0)
- Linux 命令 (1)
最新评论
-
luxianping:
怎么根据命名空间来删除缓存? 比如说用户对应的菜单,当有用户 ...
使用SSM注解做缓存操作 -
vemacitri_b:
mowengaobo 写道你可以这样理解key。为什么不单独放 ...
使用SSM注解做缓存操作 -
mowengaobo:
你可以这样理解key。为什么不单独放个参数出来如 @Rea ...
使用SSM注解做缓存操作 -
夜神月:
目前我在dao曾有如下的注解配置:@ReadThroughSi ...
使用SSM注解做缓存操作
Spring Batch 之 Sample(固定长格式文件读写)(六)
- 博客分类:
- spring batch
前篇关于Spring Batch的文章,讲述了Spring Batch 对XML文件的读写操作。 本文将通过一个完整的实例,与大家一起讨论运用Spring Batch对固定长格式文件的读写操作。实例延续前面的例子,读取一个含有四个字段的TXT文件(ID,Name,Age,Score),对读取的字段做简单的处理,然后输出到另外一个TXT文件中。
工程结构如下图:
applicationContext.xml和log4j.xml前文已经叙述过,在此不做赘述。
本文核心配置文件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.xsd http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.1.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> <bean:import resource="applicationContext.xml" /> <!-- Job信息的配置 --> <job id="fixedLengthJob"> <step id="fixedLengthStep"> <tasklet> <chunk reader="fixedLengthReader" writer="fixedLengthWriter" processor="fixedLengthProcessor" commit-interval="10"> </chunk> </tasklet> </step> </job> <!-- 固定长文件的读信息的配置 --> <bean:bean id="fixedLengthReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step"> <bean:property name="resource" value="file:#{jobParameters['inputFilePath']}" /> <bean:property name="lineMapper"> <bean:bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper"> <bean:property name="lineTokenizer" ref="lineTokenizer" /> <bean:property name="fieldSetMapper"> <bean:bean class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper"> <bean:property name="prototypeBeanName" value="studentBean"/> </bean:bean> </bean:property> </bean:bean> </bean:property> </bean:bean> <bean:bean id="studentBean" class="com.wanggc.springbatch.sample.fixedlength.StudentPojo" scope="prototype" /> <bean:bean id="lineTokenizer" class="org.springframework.batch.item.file.transform.FixedLengthTokenizer"> <bean:property name="columns" value="1-6,7-15,16-18,19-" /> <bean:property name="names" value="ID,name,age,score" /> </bean:bean> <!-- 固定长格式文件的写 --> <bean:bean id="fixedLengthWriter" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step"> <bean:property name="resource" value="file:#{jobParameters['outputFilePath']}" /> <bean:property name="lineAggregator"> <bean:bean class="org.springframework.batch.item.file.transform.FormatterLineAggregator"> <bean:property name="fieldExtractor"> <bean:bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor"> <bean:property name="names" value="ID,name,age,score" /> </bean:bean> </bean:property> <bean:property name="format" value="%-9s%-20s%3d%-2.0f" /> </bean:bean> </bean:property> </bean:bean> </bean:beans>
22-30行配置了Job的基本信息。此Job包含一个Step,Step中包含了基本的读(fixedLengthReader),处理(fixedLengthProcessor),写(fixedLengthWriter)以及commit件数(commit-interval)。
33-49行配置了读处理的详细信息。固定长格式和csv格式都属于flat文件格式,所以读取固定长格式文件也是需要使用Spring Batch提供的核心类FlatFileItemReader。对此类的配置在《Spring Batch 之 Sample(CSV文件操作)(四) 》中已经做过详细说明。但要注意lineTokenizer的配置,在读取CSV文件的时候,使用的是DelimitedLineTokenizer类,但是读取固定长格式的文件,需要使用FixedLengthTokenizer,如52-56行所示。其columns是如何分割一条记录信息,也就是说指定哪几列属于一个项目的信息(注意:列数的总长度与文件记录长度不一样的时候,会报错。注意限定范围)。属性names指定每个项目的名字。其名字与44行prototypeBeanName属性指定的Pojo属性名相同。
59-76行配置了写处理的详细信息。写固定长格式的文件,与写CSV格式的文件一样,也是使用Spring Batch提供的核心类FlatFileItemWriter。在此也不再赘述。但要注意lineAggregator属性使用的是FormatterLineAggregator类,此类的format属性可以指定每个项目所占的长度和格式。
batch.xml文件配置了对固定长文件的和写。在读之后,写之前的处理,是通过自定的FixedLengthProcessor 类处理的。详细代码如下:
package com.wanggc.springbatch.sample.fixedlength;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.stereotype.Component;
/**
* 业务处理类。
*
* @author Wanggc
*/
@Component("fixedLengthProcessor")
public class FixedLengthProcessor implements
ItemProcessor<StudentPojo, StudentPojo> {
/**
* 对取到的数据进行简单的处理。
*
* @param student
* 处理前的数据。
* @return 处理后的数据。
* @exception Exception
* 处理是发生的任何异常。
*/
public StudentPojo process(StudentPojo student) throws Exception {
/* 合并ID和名字 */
student.setName(student.getID() + "--" + student.getName());
/* 年龄加2 */
student.setAge(student.getAge() + 2);
/* 分数加10 */
student.setScore(student.getScore() + 10);
/* 将处理后的结果传递给writer */
return student;
}
}
至此,对固定长格式文件的读、处理、写操作已经介绍完毕。下面是一些辅助文件的信息。
Pojo类StudentPojo的详细代码如下:
package com.wanggc.springbatch.sample.fixedlength;
/** Pojo类_Student */
public class StudentPojo {
/** ID */
private String ID = "";
/** 名字 */
private String name = "";
/** 年龄 */
private int age = 0;
/** 分数 */
private float score = 0;
/* 为节省篇幅,getter 和 setter 已经删除 */
}
Job启动类Launch的详细代码如下:
package com.wanggc.springbatch.sample.fixedlength;
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 Launch {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
"batch.xml");
JobLauncher launcher = (JobLauncher) context.getBean("jobLauncher");
Job job = (Job) context.getBean("fixedLengthJob");
try {
// JOB实行
JobExecution result = launcher.run(
job,
new JobParametersBuilder()
.addString("inputFilePath",
"C:\\testData\\fixedLengthInputFile.txt")
.addString("outputFilePath",
"C:\\testData\\fixedLengthOutputFile.txt")
.toJobParameters());
// 运行结果输出
System.out.println(result.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
input文件内容如下:
处理结果如下:
下次,将和大家一起讨论关于Spring Batch 对复合格式文件的读写问题。
发表评论
-
Spring Batch(一)
2012-05-15 17:38 1364最近因为工作需要抽空学习了一下Spring Batch ... -
Spring Batch 之 JobParameters (十)
2012-05-14 16:30 2610继续前面关于Spring Batch系列的文章,本文 ... -
Spring Batch 之 skip讲解(九)
2012-05-14 16:29 1628前面的文章跟大家一起讨论了Spring Batch的概念, ... -
Spring Batch 之 Sample(游标方式读写DB数据表)(八)
2012-05-14 16:26 1746前面关于Spring Batch的文章,讲述了 ... -
Spring Batch 之 Sample(复合格式文件的读、多文件的写)(七)
2012-05-14 16:24 2454前面关于Spring Batch的文章,讲述了Spri ... -
Spring Batch 之 Sample(XML文件操作)(五)
2012-05-10 15:11 1296Spring Batch 之 Sample(XML文件 ... -
Spring Batch 之 Sample(CSV文件操作)(四)
2012-05-10 15:10 1680Spring Batch 之 Sample(C ... -
Spring Batch 之 Sample(Hello World)(三)
2012-05-10 15:07 1132通过前面两篇关于Spring Batch文 ... -
Spring Batch 之 框架流程简单介绍(二)
2012-05-10 15:06 1150Spring Batch流程介绍: 上图描绘了Spr ... -
Spring Batch 之 Spring Batch 简介(一)
2012-05-10 15:05 1320Spring Batch 之 Spring Batch 简 ...
相关推荐
主要给大家介绍了Spring Batch读取txt文件并写入数据库的方法,SpringBatch 是一个轻量级、全面的批处理框架。这里我们用它来实现文件的读取并将读取的结果作处理,处理之后再写入数据库中的功能。需要的朋友可以...
Spring Batch是Spring的一个子项目,使用Java语言并基于Spring框架为基础开发,使得已经使用 Spring 框架的开发者或者企业更容易访问和利用企业服务。 Spring Batch 提供了大量可重用的组件,包括了日志、追踪、事务、...
SpringBatch Tasklet sample
Spring Batch API(Spring Batch 开发文档).CHM。 官网 Spring Batch API,Spring Batch 开发文档
spring-batch4.0.0 batch spring-batch集成 spring-batch.jar
Spring Boot整合Spring Batch的一个小例子,在网上发现这方面的资源比较少,特此将其上传供大家学习。
Spring Batch是一个轻量级的,完全面向Spring的批处理框架,可以应用于企业级大量的数据处理系统。Spring Batch以POJO和大家熟知的Spring框架为基础,使开发者更容易的访问和利用企业级服务。Spring Batch可以提供...
四,Spring Batch之Step执行过程介绍 6 五,Spring Batch应用 7 1,简单应用 7 构建应用 7 对象定义 7 读写及处理接口 8 任务定义 10 任务执行 11 任务重试 13 运行时管理 14 2,高级应用 16 ...
Spring Batch学习过程中练习的一个简单完整的demo项目源码
spring batch批处理框架和对应的源码资源 rar 可以直接运行的
SpringBatch+SpringBoot构建海量数据企业批处理系统和性能优化,...SpringBatch为我们提供了统一的读写接口、丰富的任务处理方式、灵活的事务管理及并发处理、日志、监控、任务重启与跳过等特性,功能可谓是非常强大。
Work with all aspects of batch processing in a modern Java environment using a selection of Spring frameworks. This book provides up-to-date examples using the latest configuration techniques based on...
基于Spring Batch的大数据量并行处理 基于Spring Batch的大数据量并行处理
基本篇重点讲述了数据批处理的核心概念、典型的作业配置、作业步配置,以及Spring Batch框架中经典的三步走策略:数据读、数据处理和数据写,详尽地介绍了如何对CVS格式文件、JSON格式文件、XML文件、数据库和JMS...
NULL 博文链接:https://virusfu.iteye.com/blog/1150730
最近在研究springBoot+springbatch ,按照官网的实例做了一个实例。 最近在研究springBoot+springbatch ,按照官网的实例做了一个实例。
Spring Batch in Action is a comprehensive, in-depth guide to writing batch applications using Spring Batch. Written for developers who have basic knowledge of Java and the Spring lightweight ...
难得的详细spring batch资料 难得的详细spring batch资料
mybatis、springBatch、mysql、quartz、spring、springMVC 部署说明: 本项目为两个数据库,由一个数据库的表向另外一个数据库的表做数据迁移,其中数据库脚本在:/src/main/resources/sql/下面(其中data_rep中的表...
springboot2.0中使用java配置来实现springbatch,摒弃之前的xml文件配置。