5. 单步批处理作业Starters
本节介绍如何开发 Spring BatchJob与单个Step通过使用
starter 包含在 Spring Cloud Task 中。此Starters允许您使用配置
定义ItemReader一ItemWriter,或完整的单步 Spring BatchJob.
有关 Spring Batch 及其功能的更多信息,请参阅 Spring Batch 文档。
要获取 Maven 的Starters,请将以下内容添加到您的构建中:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-single-step-batch-job</artifactId>
    <version>2.3.0</version>
</dependency>如需获取 Gradle 的Starters,请将以下内容添加到您的构建中:
compile "org.springframework.cloud:spring-cloud-starter-single-step-batch-job:2.3.0"5.1. 定义作业
您可以使用Starters来定义ItemReader或ItemWriter或完全Job.
在本节中,我们定义需要定义哪些属性才能配置Job.
5.1.1. 属性
首先,Starters提供了一组属性,允许您通过一个步骤配置作业的基础知识:
| 属性 | 类型 | 默认值 | 描述 | 
|---|---|---|---|
| 
 | 
 | 
 | 作业的名称。 | 
| 
 | 
 | 
 | 步骤的名称。 | 
| 
 | 
 | 
 | 每个事务要处理的项目数。 | 
配置上述属性后,您将拥有一个具有单个基于块的步骤的作业。
此基于块的步骤读取、处理和写入Map<String, Object>实例作为
项目。但是,该步骤尚未执行任何作。您需要配置一个ItemReader一
自选ItemProcessor和ItemWiter给它一些事情做。要配置一个
其中,您可以使用属性并配置提供的选项之一
autoconfiguration 或者您可以使用标准 Spring 配置配置自己的
机制。
| 如果自行配置,则输入和输出类型必须与步骤中的其他类型匹配。
这 ItemReaderimplementations 和ItemWriter此入门器中的实现都使用
一个Map<String, Object>作为输入和输出项。 | 
5.2. ItemReader 实现的自动配置
该Starters为四种不同的ItemReader实现:AmqpItemReader,FlatFileItemReader,JdbcCursorItemReader和KafkaItemReader.
在本节中,我们将概述如何使用提供的
autoconfiguration。
5.2.1. AmqpItemReader
您可以使用 AMQP 从AmqpItemReader.这
为此进行自动配置ItemReader实现依赖于两组
配置。首先是配置AmqpTemplate.您可以
自己配置或使用 Spring Boot 提供的自动配置。请参阅 Spring Boot AMQP 文档。
配置AmqpTemplate,您可以启用批处理功能来支持它
通过设置以下属性:
| 属性 | 类型 | 默认值 | 描述 | 
|---|---|---|---|
| 
 | 
 | 
 | 如果 | 
| 
 | 
 | 
 | 指示 | 
有关更多信息,请参阅AmqpItemReader文档.
5.2.2. FlatFileItemReader
FlatFileItemReader允许您从平面文件(例如 CSV
和其他文件格式)。要从文件中读取,您可以提供一些组件
自己通过正常的 Spring 配置 (LineTokenizer,RecordSeparatorPolicy,FieldSetMapper,LineMapper或SkippedLinesCallback).您还可以使用
以下属性用于配置读取器:
| 属性 | 类型 | 默认值 | 描述 | 
|---|---|---|---|
| 
 | 
 | 
 | 确定是否应保存状态以供重新启动。 | 
| 
 | 
 | 
 | Name 用于在 | 
| 
 | 
 | 
 | 要从文件中读取的最大项目数。 | 
| 
 | 
 | 0 | 已读取的项目数。在重新启动时使用。 | 
| 
 | 
 | 空列表 | 指示文件中注释行(要忽略的行)的字符串列表。 | 
| 
 | 
 | 
 | 要读取的资源。 | 
| 
 | 
 | 
 | 如果设置为 | 
| 
 | 
 | 
 | 读取文件时要使用的编码。 | 
| 
 | 
 | 0 | 指示文件开头要跳过的行数。 | 
| 
 | 
 | 
 | 指示文件是否为分隔文件(CSV 和其他格式)。只有此属性之一或 | 
| 
 | 
 | 
 | 如果读取分隔文件,则指示要解析的分隔符。 | 
| 
 | 
 | 
 | 用于确定用于引用值的字符。 | 
| 
 | 
 | 空列表 | 用于确定要包含在项中的记录中的哪些字段的索引列表。 | 
| 
 | 
 | 
 | 指示是否按列号解析文件的记录。只有此属性之一或 | 
| 
 | 
 | 空列表 | 用于解析固定宽度记录的列范围列表。请参阅范围文档。 | 
| 
 | 
 | 
 | 从记录解析的每个字段的名称列表。这些名称是 | 
| 
 | 
 | 
 | 如果设置为 | 
5.2.3. JdbcCursorItemReader
这JdbcCursorItemReader对关系数据库运行查询并迭代
生成的游标 (ResultSet) 提供生成的项。此自动配置
允许您提供PreparedStatementSetter一个RowMapper,或两者兼而有之。你
还可以使用以下属性来配置JdbcCursorItemReader:
| 属性 | 类型 | 默认值 | 描述 | 
|---|---|---|---|
| 
 | 
 | 
 | 确定是否应保存状态以供重启。 | 
| 
 | 
 | 
 | Name 用于在 | 
| 
 | 
 | 
 | 要从文件中读取的最大项目数。 | 
| 
 | 
 | 0 | 已读取的项目数。在重新启动时使用。 | 
| 
 | 
 | 驱动程序的提示,用于指示每次调用数据库系统要检索多少条记录。为了获得最佳性能,您通常希望将其设置为与块大小匹配。 | |
| 
 | 
 | 从数据库读取的最大项目数。 | |
| 
 | 
 | 查询超时的毫秒数。 | |
| 
 | 
 | 
 | 确定读取器在处理时是否应忽略 SQL 警告。 | 
| 
 | 
 | 
 | 指示是否应在每次读取后验证游标的位置,以验证 | 
| 
 | 
 | 
 | 指示驱动程序是否支持光标的绝对定位。 | 
| 
 | 
 | 
 | 指示连接是否与其他处理共享(因此是事务的一部分)。 | 
| 
 | 
 | 
 | 要从中读取的 SQL 查询。 | 
5.2.4. KafkaItemReader
从 Kafka 主题摄取数据分区很有用,并且正是KafkaItemReader可以做。要配置KafkaItemReader,两件
的配置是必需的。首先,使用 Spring Boot 的 Kafka 配置 Kafka
autoconfiguration 是必需的(参见 Spring Boot Kafka 文档)。
从 Spring Boot 配置 Kafka 属性后,您可以配置KafkaItemReader通过设置以下属性来自行设置:
| 属性 | 类型 | 默认值 | 描述 | 
|---|---|---|---|
| 
 | 
 | 
 | Name 用于在 | 
| 
 | 
 | 
 | 要从中读取的主题的名称。 | 
| 
 | 
 | 空列表 | 要从中读取的分区索引列表。 | 
| 
 | 
 | 30 | 超时 | 
| 
 | 
 | 
 | 确定是否应保存状态以供重启。 | 
5.3. ItemProcessor 配置
单步批处理作业自动配置接受ItemProcessor如果有一个
在ApplicationContext.如果找到正确类型的
(ItemProcessor<Map<String, Object>, Map<String, Object>>),它是自动接线的
进入步骤。
5.4. ItemWriter 实现的自动配置
此Starters提供自动配置ItemWriter实现匹配受支持的ItemReader实现:AmqpItemWriter,FlatFileItemWriter,JdbcItemWriter和KafkaItemWriter. 本节介绍如何使用自动配置来配置受支持的ItemWriter.
5.4.1. AmqpItemWriter
要写入 RabbitMQ 队列,您需要两组配置。首先,您需要一个AmqpTemplate. 获得此目的的最简单方法是使用 Spring Boot 的RabbitMQ 自动配置。请参阅 Spring Boot RabbitMQ 文档。配置AmqpTemplate,您可以配置AmqpItemWriter通过设置以下属性:
| 属性 | 类型 | 默认值 | 描述 | 
|---|---|---|---|
| 
 | 
 | 
 | 如果 | 
| 
 | 
 | 
 | 指示是否 | 
5.4.2. FlatFileItemWriter
要将文件写入作为步骤的输出,您可以配置FlatFileItemWriter.
自动配置接受已显式配置的组件(例如LineAggregator,FieldExtractor,FlatFileHeaderCallback或FlatFileFooterCallback) 和
通过设置指定的以下属性配置的组件:
| 属性 | 类型 | 默认值 | 描述 | 
|---|---|---|---|
| 
 | 
 | 
 | 要读取的资源。 | 
| 
 | 
 | 
 | 指示输出文件是否为分隔文件。如果 | 
| 
 | 
 | 
 | 指示输出文件是否为格式化文件。如果 | 
| 
 | 
 | 
 | 用于为格式化文件生成输出的格式。格式化是通过使用 | 
| 
 | 
 | 
 | 这 | 
| 
 | 
 | 0 | 记录的最大长度。如果为 0,则大小不受限制。 | 
| 
 | 
 | 0 | 最小记录长度。 | 
| 
 | 
 | 
 | 这 | 
| 
 | 
 | 
 | 写入文件时要使用的编码。 | 
| 
 | 
 | 
 | 指示是否应在刷新时将文件强制同步到磁盘。 | 
| 
 | 
 | 
 | 从记录解析的每个字段的名称列表。这些名称是 | 
| 
 | 
 | 
 | 指示如果找到输出文件,是否应将文件追加到。 | 
| 
 | 
 | 
 | 什么 | 
| 
 | 
 | 
 | Name 用于在 | 
| 
 | 
 | 
 | 确定是否应保存状态以供重启。 | 
| 
 | 
 | 
 | 如果设置为 | 
| 
 | 
 | 
 | 如果设置为 | 
| 
 | 
 | 
 | 指示读取器是否为事务队列(指示读取的项在失败时返回到队列)。 | 
5.4.3. JdbcBatchItemWriter
要将步骤的输出写入关系数据库,此Starters提供了以下功能
自动配置JdbcBatchItemWriter.自动配置允许您提供
有ItemPreparedStatementSetter或ItemSqlParameterSourceProvider和
配置选项,通过设置以下属性:
| 属性 | 类型 | 默认值 | 描述 | 
|---|---|---|---|
| 
 | 
 | 
 | Name 用于在 | 
| 
 | 
 | 
 | 用于插入每个项目的 SQL。 | 
| 
 | 
 | 
 | 是否验证每次插入是否至少更新一条记录。 | 
5.4.4. KafkaItemWriter
要将步骤输出写入 Kafka 主题,您需要KafkaItemWriter.这个Starters
为KafkaItemWriter通过使用两个地方的设施。
第一个是 Spring Boot 的 Kafka 自动配置。(参见 Spring Boot Kafka 文档。
其次,此Starters允许在编写器上配置两个属性。
| 属性 | 类型 | 默认值 | 描述 | 
|---|---|---|---|
| 
 | 
 | 
 | 要写入的 Kafka 主题。 | 
| 
 | 
 | 
 | 传递给编写器的项是否全部作为删除事件发送到主题。 | 
有关KafkaItemWiter,请参阅KafkaItemWiter文档.