接下来我们将通过简单的一个在线商店的应用示例来展示如何使用SpringBatch.通过这个示例我们可以进一步去理解SpringBatch批量处理程序它是如何实现高效的读写数据,何时去使用内部组件,如何实现你自己的组件,以及如何配置一个批量任务在Spring容器中.

       这里我们简单描述一下业务需求.一个公司A想要扩展它的业务.主业是通过网络来销售货物.为了扩展他们选择建立一个专门的在线商店应用.他们将使用批量作业来填充来自内部目录在线数据库转有系统.如下图所示,改系统将会定期处理数据,每天晚上在目录中增加新产品或者更新现有产品.

    

计算机生成了可选文字:Catalog System Batch Online store application

 

      导入产品批量程序将会导入产品记录从一个富文本文件,然后把他们更新到在线商店的数据库中.

      

计算机生成了可选文字:Decompressi ng Reading and writing D base u pdated Compress"

    具体流程如上图,目录系统会压缩富文本文件,然后批量程序去解析此文件,然后进行读写操作更新到对应的数据库中.

   

     读写产品目录可以说是一个SpringBatch任务的核心.目录系统会提供一个富文本文件,里面包含了产品的目录.SpringBatchJob就需要把他导入到在线商店数据库中.

     相对而言读写富文本文件对SpringBatch而言是比较轻松的,你所需要做的就是配置一个SpringBatch的组件去读取文件的内容,然后再实现一个简单的写的接口,然后再创建一个配置文件来掌控批量处理的流程.如下图.

     

    

计算机生成了可选文字:stuau)auu,M 冖 冖 冖 囬 「 一 鬥

     因为读写还有复制他们作为通用的行为在批量程序中,因此SpringBatch为他们提供了特别的支持.内部包含了很多的读写组件.同时它也提供了面向批量的处理方式称之为:chunk processing .暂且翻译成块处理吧.

     在上图我们看到ItemReaderItemWriter.Spring Batch 主要是通过他们两个来处理读写的场景需求.

     在块处理的时候,SpringBatch提供一个可选择的处理步骤,你可以在把要处理的内容在发给ItemReader的时候进行提前处理,这样的话,如果你有不想写某些内容的时候会有帮助的.具体的处理步骤就是实现了ItemProcessor接口.

   

计算机生成了可选文字:process() transformed ite m read() process() transformed itern • write(transformed items)

 

            读取文件接口:

packageorg.springframework.batch.item;

publicinterface ItemReader<T> {

Tread() throws Exception, UnexpectedInputException,

ParseException,

NonTransientResourceException;

}

 

转换文件接口(可选)

packageorg.springframework.batch.item;

publicinterface ItemProcessor<I, O> {

Oprocess(I item) throws Exception;

}

 

写文件接口:

packageorg.springframework.batch.item;

importjava.util.List;

publicinterface ItemWriter<T> {

voidwrite(List<? extends T> items) throws Exception;

}

 

      以上三个接口便是流程中所设计到的读写和处理接口,在接下来的文章中我们将会展示如何配置SpringBatch来读取一个文本文件的内容到数据库中.

  

 

 

 

 

 

 

    

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐