AXIN的gravatar头像
AXIN 2014-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
最代码最近下载分享源代码列表最近下载
味卜鲜码  LV6 2020年10月28日
cz206616  LV10 2020年5月30日
laowantong260  LV7 2020年1月19日
太阳暖人不暖心  LV7 2019年5月7日
sp朱盼  LV16 2018年5月4日
liangpc  LV6 2018年2月23日
心之所往  LV8 2017年8月25日
mzoai  LV19 2017年6月27日
txl830909  LV2 2017年6月2日
vsalw5320  LV12 2016年11月9日
最代码最近浏览分享源代码列表最近浏览
神龙摆尾无拘束  LV2 2023年3月17日
二手玫瑰  LV15 2022年11月18日
muxueliang  LV8 2022年7月29日
1529860026  LV24 2022年7月14日
雾岛听风  LV7 2021年10月20日
灬艾希  LV9 2021年5月11日
味卜鲜码  LV6 2020年10月28日
is_gary  LV15 2020年8月24日
兰陵2080 2020年6月9日
暂无贡献等级
cz206616  LV10 2020年5月30日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友