接下来我们将通过简单的一个在线商店的应用示例来展示如何使用SpringBatch.通过这个示例我们可以进一步去理解SpringBatch批量处理程序它是如何实现高效的读写数据,何时去使用内部组件,如何实现你自己的组件,以及如何配置一个批量任务在Spring容器中.
这里我们简单描述一下业务需求.一个公司A想要扩展它的业务.主业是通过网络来销售货物.为了扩展他们选择建立一个专门的在线商店应用.他们将使用批量作业来填充来自内部目录在线数据库转有系统.如下图所示,改系统将会定期处理数据,每天晚上在目录中增加新产品或者更新现有产品.
导入产品批量程序将会导入产品记录从一个富文本文件,然后把他们更新到在线商店的数据库中.
具体流程如上图,目录系统会压缩富文本文件,然后批量程序去解析此文件,然后进行读写操作更新到对应的数据库中.
读写产品目录可以说是一个SpringBatch任务的核心.目录系统会提供一个富文本文件,里面包含了产品的目录.SpringBatch的Job就需要把他导入到在线商店数据库中.
相对而言读写富文本文件对SpringBatch而言是比较轻松的,你所需要做的就是配置一个SpringBatch的组件去读取文件的内容,然后再实现一个简单的写的接口,然后再创建一个配置文件来掌控批量处理的流程.如下图.
因为读写还有复制他们作为通用的行为在批量程序中,因此SpringBatch为他们提供了特别的支持.内部包含了很多的读写组件.同时它也提供了面向批量的处理方式称之为:chunk processing .暂且翻译成块处理吧.
在上图我们看到ItemReader和ItemWriter.Spring Batch 主要是通过他们两个来处理读写的场景需求.
在块处理的时候,SpringBatch提供一个可选择的处理步骤,你可以在把要处理的内容在发给ItemReader的时候进行提前处理,这样的话,如果你有不想写某些内容的时候会有帮助的.具体的处理步骤就是实现了ItemProcessor接口.
读取文件接口:
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来读取一个文本文件的内容到数据库中.