最代码广告位
AXIN的gravatar头像
AXIN2014-03-24 11:22:10

Spring Batch入门实例教程实现对CVS文件的操作

 Spring Batch是一个轻量级的,完全面向Spring的批处理框架,可以应用于企业级大量的数据处理系统。Spring Batch以POJO和大家熟知的Spring框架为基础,使开发者更容易的访问和利用企业级服务。Spring Batch可以提供大量的,可重复的数据处理功能,包括日志记录/跟踪,事务管理,作业处理统计工作重新启动、跳过,和资源管理等重要功能。

详细介绍请看上一篇Spring Batch入门教程及其框架搭建 

   本文将再通过一个完整的实例,运用Spring Batch对CSV文件的读写操作。此实例的流程是:读取一个含有四个字段的CSV文件(ID,Name,Age,Score),对读取的字段做简单的处理,然后输出到另外一个CSV文件中。

 工程结构如下图:

                   Spring Batch入门实例教程实现对CVS文件的操作

项目文件说明:

1、JobLaunch类用来启动Job,

2、CsvItemProcessor类用来对Reader取得的数据进行处理,

3、Student类是一个POJO类,用来存放映射的数据。

4、inputFile.csv是数据读取文件, outputFile.csv是数据输出文件。

本Job包含一个Step,完成一个完整的CSV文件读写功能。分别由 csvItemReader完成CSV文件的读操作,由 csvItemProcessor完成对取得数据的处理,由 csvItemWriter完成对CSV文件的写操作。

 

    csvItemReader实现的是Spring Batch提供FlatFileItemReader类,此类主要用于Flat文件的读操作。它包含两个必要的属性 resource和 lineMapper。前者指定要读取的文件的位置,后者是将文件的每一行映射成一个Pojo对象。其中 lineMapper也有两个重要属性 lineTokenizer和 fieldSetMapper, lineTokenizer将文件的一行分解成一个 FieldSet,然后由 fieldSetMapper映射成Pojo对象。

    这种方式与DB的读操作非常类似。lineMapper类似于ResultSet,文件中的一行类似于Table中的一条记录,被封装成的FieldSet,类似于RowMapper。至于怎么将一条记录封装,这个工作由lineTokenizer的继承类DelimitedLineTokenizer完成。DelimitedLineTokenizer的delimiter属性决定文件的一行数据按照什么分解,默认的是“,”, names属性标示分解的每个字段的名字,传给fieldSetMapper(本实例用的是BeanWrapperFieldSetMapper)的时候,就可以按照这个名字取得相应的值。fieldSetMapper的属性prototypeBeanName,是映射Pojo类的名字。设置了此属性后,框架就会将lineTokenizer分解成的一个FieldSet映射成Pojo对象,映射是按照名字来完成的(lineTokenizer分解时标注的名字与Pojo对象中字段的名字对应)。

      总之,FlatFileItemReader读取一条记录由以下四步完成:1,从resource指定的文件中读取一条记录;2,lineTokenizer将这条记录按照delimiter分解成Fileset,每个字段的名字由names属性取得;3,将分解成的Fileset传递给fieldSetMapper,由其按照名字映射成Pojo对象;4,最终由FlatFileItemReader将映射成的Pojo对象返回,框架将返回的对象传递给Processor。

   实例中用到的输入数据如下:

                Spring Batch入门实例教程实现对CVS文件的操作

    实例输出结果如下:    

                Spring Batch入门实例教程实现对CVS文件的操作


最代码官方编辑于2014-3-30 21:07:13


打赏

文件名:SpringBatchCSV.rar,文件大小:15.422K下载
  • /
      • /SpringBatchCSV
        • /SpringBatchCSV/.classpath
        • /SpringBatchCSV/.project
          • /SpringBatchCSV/.settings
            • /SpringBatchCSV/.settings/.jsdtscope
            • /SpringBatchCSV/.settings/org.eclipse.jdt.core.prefs
            • /SpringBatchCSV/.settings/org.eclipse.m2e.core.prefs
            • /SpringBatchCSV/.settings/org.eclipse.wst.common.component
            • /SpringBatchCSV/.settings/org.eclipse.wst.common.project.facet.core.xml
            • /SpringBatchCSV/.settings/org.eclipse.wst.jsdt.ui.superType.container
            • /SpringBatchCSV/.settings/org.eclipse.wst.jsdt.ui.superType.name
            • /SpringBatchCSV/.settings/org.eclipse.wst.validation.prefs
最代码最近下载分享源代码列表最近下载
laowantong260 LV71月19日
月亮星星星星星星
太阳暖人不暖心 LV72019年5月7日
月亮星星星星星星
sp朱盼 LV162018年5月4日
太阳
liangpc LV62018年2月23日
月亮星星星星
心之所往 LV82017年8月25日
月亮月亮
mzoai LV192017年6月27日
太阳星星星星星星
txl830909 LV22017年6月2日
星星星星
vsalw5320 LV122016年11月9日
月亮月亮月亮
dywxdz LV52016年5月4日
月亮星星
最代码温柔 LV182016年2月26日
太阳星星星星
最代码最近浏览分享源代码列表最近浏览
ITboysDu LV113月20日
月亮月亮星星星星星星
liudeshuai970926 LV63月2日
月亮星星星星
wkc LV182月23日
太阳星星星星
laowantong260 LV71月18日
月亮星星星星星星
失落的小象 LV82019年12月15日
月亮月亮
你爸爸123 LV72019年9月18日
月亮星星星星星星
nc_demo1 LV32019年8月21日
星星星星星星
leavon2019年8月1日
暂无贡献等级
34549668752019年7月18日
暂无贡献等级
jamal1027 LV12019年7月18日
星星
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友