5. 单步批处理作业Starters
本部分介绍了如何使用 Spring Cloud Task 中包含的 starter 开发一个 Spring Batch Job,通过使用该 starter,可以使用配置定义一个 Step,一个 ItemReader,或一个完整的单步 Spring Batch ItemWriter。有关 Spring Batch 的更多信息及其能力,请参见 Spring Batch 文档。
获取Maven起步器时,请添加以下内容到你的构建中:
<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来赋予它实际功能。要配置其中之一,您可以使用属性并配置其中一个提供了自动配置选项,或者可以使用标准Spring配置机制来配置自己的组件。
| 如果您配置了自定义项,则输入和输出类型必须与步骤中的其他项匹配。 此Starters中的 |
5.2. 自动配置项目读取器实现
此Starters为四种不同的 ItemReader 实现提供了自动配置:AmqpItemReader、FlatFileItemReader、JdbcCursorItemReader 和 KafkaItemReader。在本节中,我们概述了如何通过使用提供的自动配置来配置其中每一个。
5.2.1. AMQP项目读取器
您可以使用AmqpItemReader通过AMQP从队列或主题读取。此ItemReader实现的自动配置取决于两组配置。AmqpTemplate的配置是第一部分。您既可以自己配置,也可以使用Spring Boot提供的自动配置。参见Spring Boot AMQP文档。一旦配置了AmqpTemplate,可以通过设置以下属性来启用批处理功能以支持它:
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
|
|
|
如果 |
|
|
|
指示是否应注册 |
有关更多信息,请参阅AmqpItemReader文档。
5.2.2. 平面文件项目读取器
FlatFileItemReader允许您从平面文件(如CSV和其他文件格式)中读取数据。要从文件中读取,您可以使用正常的Spring配置提供一些组件(LineTokenizer、RecordSeparatorPolicy、FieldSetMapper、LineMapper或SkippedLinesCallback)。您还可以使用以下属性来配置读取器:
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
|
|
|
确定是否应为重启保存状态。<br> |
|
|
|
用于在 |
|
|
|
从文件中读取的最大项目数。 |
|
|
0 |
已经读取的项目数量。在重新启动时使用。 |
|
|
空列表 |
一个字符串列表,用于指示文件中被注释的行(要忽略的行)。 |
|
|
|
要读取的资源。 |
|
|
|
如果设置为 |
|
|
|
读取文件时要使用的编码。 |
|
|
0 |
指示要跳过的文件开头行数。 |
|
|
|
指示文件是否为分隔符文件(CSV和其他格式)。此属性或 |
|
|
|
如果读取分隔符文件,则表示要解析的分隔符。 |
|
|
|
用于确定引用值所使用的字符。 |
|
|
空列表 |
一个列表,用于确定记录中的哪些字段包含在条目中。 |
|
|
|
表示是否通过列号解析文件记录。此属性或 |
|
|
空列表 |
要用来解析固定宽度记录的列范围列表。请参阅Range 文档。 |
|
|
|
从记录中解析出的每个字段的名称列表。这些名称是从此 |
|
|
|
如果设置为 |
5.2.3. Jdbc游标项读取器
该JdbcCursorItemReader针对关系数据库运行查询,并迭代结果光标(ResultSet)以提供结果项。此自动配置让您能够提供一个PreparedStatementSetter、RowMapper或两者都提供。您还可以使用以下属性来配置JdbcCursorItemReader:
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
|
|
|
确定状态是否应为重新启动而保存。 |
|
|
|
用于在 |
|
|
|
从文件中读取的最大项目数。 |
|
|
0 |
已经读取的项目数量。在重新启动时使用。 |
|
|
提示驱动程序,指示每次调用数据库系统时要检索的记录数。为了获得最佳性能,通常希望将其设置为与块大小匹配。 |
|
|
|
从数据库中读取的最大项目数。 |
|
|
|
查询超时的毫秒数。 |
|
|
|
|
确定读取器在处理时是否应该忽略SQL警告。 |
|
|
|
指示是否应在每次读取后验证游标的位置,以确保 |
|
|
|
指示驱动程序是否支持游标的位置绝对定位。 |
|
|
|
指示连接是否与其他处理共享(因此是事务的一部分)。 |
|
|
|
从中读取SQL查询。 |
5.2.4. KafkaItemReader
从Kafka主题中摄取数据分区很有用,这正是KafkaItemReader可以做到的。要配置KafkaItemReader,需要两个配置项。首先,需要使用Spring Boot的Kafka自动配置来配置Kafka(参见Spring Boot Kafka文档)。 一旦您使用Spring Boot配置了Kafka属性,就可以通过设置以下属性来配置KafkaItemReader本身:
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
|
|
|
用于在 |
|
|
|
要从中读取的主题名称。 |
|
|
空列表 |
要从中读取的分区索引列表。 |
|
|
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 |
最小记录长度。 |
|
|
|
分隔文件中用于分隔字段的 |
|
|
|
写入文件时使用的编码。 |
|
|
|
指示在刷新时是否应将文件强制同步到磁盘。 |
|
|
|
从记录中解析出的每个字段的名称列表。这些名称是通过此 |
|
|
|
指示是否应在找到输出文件时将其追加到该文件中。 |
|
|
|
使用什么 |
|
|
|
用于在 |
|
|
|
确定状态是否应为重新启动而保存。 |
|
|
|
如果设置为 |
|
|
|
如果设置为 |
|
|
|
指示读取器是否为事务队列(表示在失败时,已读取的项目会返回到队列中)。 |
5.4.3. JdbcBatchItemWriter
要将步骤的输出写入关系型数据库,此启动程序提供自动配置JdbcBatchItemWriter的功能。自动配置允许您通过设置以下属性来提供自己的ItemPreparedStatementSetter或ItemSqlParameterSourceProvider以及配置选项:
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
|
|
|
用于在 |
|
|
|
插入每个项目的SQL。 |
|
|
|
是否验证每个插入操作至少更新一条记录。 |
5.4.4. KafkaItemWriter
要将步骤输出写入 Kafka 主题,您需要 KafkaItemWriter。此Starters通过使用来自两个地方的设施为 KafkaItemWriter 提供自动配置。 第一个是 Spring Boot 的 Kafka 自动配置。(参见 Spring Boot Kafka 文档。) 其次,此Starters让您配置编写器上的两个属性。
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
|
|
|
要写入的Kafka主题。 |
|
|
|
传递给写入器的项目是否都应作为删除事件发送到主题。 |
有关KafkaItemWiter的配置选项的更多信息,请参阅KafkaItemWiter文档。