这是Spring批处理教程,它是Spring框架的一部分。 Spring Batch提供了可重用的功能,这些功能对于处理大量记录至关重要,包括日志记录/跟踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管理。 它还提供了更高级的技术服务和功能,这些功能和功能将通过优化和分区技术来实现极高容量和高性能的批处理作业。
在这里,您可以找到有关其主要组成部分和概念的清晰说明,以及几个工作示例。 本教程通常与Spring框架无关。 希望您熟悉诸如Spring框架的主要Struts之类的反转控制和依赖注入之类的机制。 还假定您知道如何为基本应用程序配置Spring框架上下文,并且习惯于使用基于注解和基于Spring项目的配置文件。
如果不是这种情况,我真的建议您在开始学习什么是Spring批处理及其工作原理之前,先转到Spring框架官方页面并学习基本教程。 这是一个很好的例子: http : //docs.spring.io/docs/Spring-MVC-step-by-step/ 。
在本教程的最后,您可以找到列出了所有示例和一些其他内容的压缩文件。
下面列出了用于编写本教程的软件:
- Java Update 8版本3.1
- Apache Maven 3.2.5
- Eclipse Luna 4.4.1
- Spring Batch 3.0.3及其所有依赖项(我确实建议使用Maven或Gradle来解决所有必需的依赖项并避免麻烦)
- Spring Boot 1.2.2及其所有依赖项(我真的建议使用Maven或Gradle来解决所有必需的依赖项并避免麻烦)
- MySQL Community Server版本5.6.22
- MongoDB 2.6.8
- HSQLDB版本1.8.0.10
尽管本教程用于解决依赖关系,编译和执行所提供的示例,但本教程不会解释如何使用Maven。 在以下文章http://examples.javacodegeeks.com/enterprise-java/maven/log4j-maven-example/中可以找到更多信息。
示例中还大量使用了Spring Boot模块,有关它的更多信息,请参考官方的Spring Boot文档: http : //projects.spring.io/spring-boot/ 。
目录
1.简介
Spring Batch是一个用于批处理的开源框架。 它作为Spring框架内的模块构建,并依赖于此框架(以及其他框架)。 在继续进行Spring Batch之前,我们将在这里放置批处理的定义:
“批处理是指在计算机上执行一系列程序(“作业”)而无需人工干预” (摘自Wikipedia)。
因此,就我们而言,批处理应用程序执行一系列作业(迭代或并行),在这些作业中,无需任何交互即可读取,处理和写入输入数据。 我们将看到Spring Batch如何帮助我们实现这一目的。
Spring Batch提供了用于处理大量数据的机制,例如事务管理,作业处理,资源管理,日志记录,跟踪,数据转换,接口等。这些功能是现成可用的,并且可以由包含Spring Batch的应用程序重用。框架。 通过使用这些多样化的技术,该框架在处理记录时会兼顾性能和可伸缩性。
通常,批处理应用程序可以分为三个主要部分:
- 读取数据(从数据库,文件系统等)
- 处理数据(过滤,分组,计算,验证...)
- 写入数据(到数据库,报告,分发…)
Spring Batch包含功能和抽象(将在本文中进行解释),这些功能和抽象用于自动化这些基本步骤,并允许应用程序程序员对其进行配置,重复,重试,停止,将它们作为单个元素执行或分组(事务管理)等
它还包含用于主要数据格式,行业标准和提供程序(例如XML,CSV,SQL,Mongo DB等)的类和接口。
在本教程的下一章中,我们将解释并提供所有这些步骤的示例以及Spring Batch提供的不同可能性。
2.概念
以下是Spring Batch框架中最重要的概念:
职位
作业是代表批处理过程的抽象,即批处理应用程序中必须执行的一系列动作或命令。
Spring批处理包含以下表示作业的界面: http : //docs.spring.io/spring-batch/apidocs/org/springframework/batch/core/Job.html 。 简单作业包含步骤列表,这些步骤顺序或并行执行。
为了配置Job,足以初始化步骤列表,这是虚拟Job的基于xml的配置示例:
<job id="eatJob" xmlns="http://www.springframework.org/schema/batch">
<step id="stepCook" next="stepEntries">
<tasklet>
<chunk reader="cookReader" writer="cookProcessor"
processor="cookWriter" commit-interval="1" />
</tasklet>
</step>
<step id="stepEntries" next="stepMeat">
<tasklet>
<chunk reader="entriesReader" writer="entriesProcessor"
processor="entriesWriter" commit-interval="1" />
</tasklet>
</step>
<step id="stepMeat" next="stepWine">
<tasklet ref="drinkSomeWine" />
</step>
<step id="stepWine" next="clean">
<tasklet>
<chunk reader="wineReader" writer="wineProcessor"
processor="wineWriter" commit-interval="1" />
</tasklet>
</step>
<step id="clean">
<tasklet ref="cleanTheTable" />
</step>
</job>
工作启动器
这个介面http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/core/launch/JobLauncher.html代表工作启动器。 其run()
方法的实现负责为给定的作业和作业参数启动作业执行。
工作实例
这是代表给定Job的单次运行的抽象。 它是唯一且可识别的。 表示此抽象的类为http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/core/JobInstance.html 。
如果作业实例未成功完成并且可以重新启动作业,则可以重新启动作业实例。 否则将引发错误。
脚步
步骤主要是组成Job(和Job实例)的部分。 Step
是Job
的一部分,包含所有必要的信息,以执行预期在该作业阶段执行的批处理操作。 Spring Batch中的步骤由ItemReader
, ItemProcessor
和ItemWriter
组成,根据其成员的复杂性,它们可能非常简单或极其复杂。
步骤还包含其可能使用的处理策略,提交间隔,事务处理机制或作业存储库的配置选项。 Spring Batch通常使用块处理,即一次读取所有数据,然后在预配置的间隔(称为提交间隔)上处理和写入这些数据的“块”。
这是一个基于XML的步骤配置(间隔为10)的非常基本的示例:
<step id="step" next="nextStep">
<tasklet>
<chunk reader="customItemReader" writer="customItemWriter" processor="customItemProcessor" commit-interval="10" />
</tasklet>
</step>
下面的代码段是基于注释的版本,定义了涉及的读取器,写入器和处理器,块处理策略和10的提交间隔(这是本教程大多数示例中使用的提交间隔):