Single Step Batch Job Starter
使用该文档提供的 starter,你可以通过配置来创建具有一个步骤的 Spring Batch Job。此 starter 提供自动配置,用于配置支持的 ItemReader、ItemWriter 或完整的单步 Spring Batch Job。
本节介绍如何使用 Spring Cloud Task 中包含的启动程序开发一个具有单个 Step
的 Spring Batch Job
。此启动程序允许您使用配置来定义 ItemReader
、 ItemWriter
或一个完整的单步 Spring Batch Job
。有关 Spring Batch 及其功能的更多详细信息,请参阅 Spring Batch documentation 。
要获取适用于 Maven 的 starter,请将以下内容添加到构建中:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-single-step-batch-job</artifactId>
<version>2.3.0</version>
</dependency>
要获取适用于 Gradle 的 starter,请将以下内容添加到构建中:
compile "org.springframework.cloud:spring-cloud-starter-single-step-batch-job:2.3.0"
Defining a Job
你可以使用 starter 来尽可能少地定义 ItemReader
或 ItemWriter
,或尽可能多地定义 Job
。在本节中,我们定义配置 Job
所需定义的属性。
Properties
首先,starter 提供一组属性,让你可以配置具有一个步骤的基本作业:
Property | Type | Default Value | Description |
---|---|---|---|
|
|
|
作业名称。 |
|
|
|
步骤名称。 |
|
|
|
每个交易要处理的项目数量。 |
配置上述属性后,你将获得一个具有一个基于块的步骤的作业。此基于块的步骤将读取、处理和写入 Map<String, Object>
实例作为项目。但是,该步骤尚未执行任何操作。你需要配置一个 ItemReader
、一个可选 ItemProcessor
和一个 ItemWriter
,以便提供要执行的操作。要配置其中一个,你可以使用属性并配置具有提供的自动配置的选项之一,也可以使用标准 Spring 配置机制配置你自己的选项。
如果你配置自己的属性,输入和输出类型必须与步骤中的其他属性匹配。此 starter 中的 |
Autoconfiguration for ItemReader Implementations
此 starter 为四个不同的 ItemReader
实现(AmqpItemReader
、FlatFileItemReader
、JdbcCursorItemReader
和 KafkaItemReader
)提供自动配置。在本节中,我们概述了如何使用提供的自动配置配置每一个实现。
AmqpItemReader
您可以使用 AmqpItemReader
来从队列或主题读取。此 ItemReader
实现的自动配置依赖于两组配置。首先是 AmqpTemplate
的配置。您可以自己配置此项,也可以使用 Spring Boot 提供的自动配置。请参阅 Spring Boot AMQP documentation 。配置好 AmqpTemplate
后,您可以通过设置以下属性来启用批处理功能对其提供支持:
Property | Type | Default Value | Description |
---|---|---|---|
|
|
|
如果 |
|
|
|
指示是否应注册 |
有关更多信息,请参阅 AmqpItemReader
documentation 。
FlatFileItemReader
FlatFileItemReader
让你可以从平面文件(例如 CSV 和其他文件格式)中读取。要从文件中读取,你可以通过常规 Spring 配置提供一些组件(LineTokenizer
、RecordSeparatorPolicy
、FieldSetMapper
、LineMapper
或 SkippedLinesCallback
)。你还可以使用以下属性配置读取器:
Property | Type | Default Value | Description |
---|---|---|---|
|
|
|
确定是否应保存状态以便重启。 |
|
|
|
用于在 |
|
|
|
从文件中读取的最大项目数。 |
|
|
0 |
已读取的项目数。用于重新启动。 |
|
|
empty List |
指示文件中注释行(需要忽略的行)的字符串列表。 |
|
|
|
要读取的资源。 |
|
|
|
如果设置为 |
|
|
|
读取文件时使用的编码。 |
|
|
0 |
指示文件开头要跳过的行数。 |
|
|
|
指示文件是否为分隔文件(CSV 和其他格式)。这个属性或 |
|
|
|
如果读取分隔文件,则指示要解析的分隔符。 |
|
|
|
用于确定用于对值进行引用的字符。 |
|
|
empty list |
索引列表以确定要把记录中的哪些字段包括在项目中。 |
|
|
|
指示是否按列数解析文件的记录。这个属性或 |
|
|
empty list |
用于解析固定宽度记录的列范围列表。请参阅 Range documentation。 |
|
|
|
从记录中解析的每个字段的名称列表。这些名称是此 |
|
|
|
如果设置为 |
JdbcCursorItemReader
JdbcCursorItemReader
对关系数据库运行查询,并遍历结果游标 (ResultSet
) 提供结果项目。通过此自动配置,你可以提供一个 PreparedStatementSetter
、一个 RowMapper
或两者。你还可以使用以下属性配置 JdbcCursorItemReader
:
Property | Type | Default Value | Description |
---|---|---|---|
|
|
|
确定是否应保存状态以便重启。 |
|
|
|
用于在 |
|
|
|
从文件中读取的最大项目数。 |
|
|
0 |
已读取的项目数。用于重新启动。 |
|
|
一个提示,可以让驱动程序知道在每次调用数据库系统时检索多少条记录。要获得最佳性能,您通常需要将其设置为与块大小相匹配。 |
|
|
|
从数据库读取的最大项数。 |
|
|
|
查询超时的毫秒数。 |
|
|
|
|
确定在处理时读取器是否应忽略 SQL 警告。 |
|
|
|
指示是否应在每次读取后验证光标的位置,以验证 |
|
|
|
指示驱动程序是否支持光标的绝对定位。 |
|
|
|
指示连接是否与其他处理共享(因此是事务的一部分)。 |
|
|
|
要从中读取的 SQL 查询。 |
你还可以通过使用以下属性明确指定读取器的 JDBC 数据源:JdbcCursorItemReader
属性
Property | Type | Default Value | Description |
---|---|---|---|
|
|
|
确定是否应启用 |
|
|
|
数据库的 JDBC URL。 |
|
|
|
数据库的登录用户名。 |
|
|
|
数据库的登录密码。 |
|
|
|
JDBC 驱动的完全限定名称。 |
|
KafkaItemReader
从 Kafka 主题中提取数据分区非常有用,这正是 KafkaItemReader
所能做到的。要配置 KafkaItemReader
,需要两部分配置。首先,需要使用 Spring Boot 的 Kafka 自动配置对 Kafka 进行配置(请参见 Spring Boot Kafka documentation)。一旦您通过 Spring Boot 配置了 Kafka 属性,就可以通过设置以下属性来配置 KafkaItemReader
本身:
Property | Type | Default Value | Description |
---|---|---|---|
|
|
|
用于在 |
|
|
|
要从中读取的主题的名称。 |
|
|
empty list |
要从中读取的分区索引列表。 |
|
|
30 |
|
|
|
|
确定是否应保存状态以便重启。 |
Native Compilation
单步批处理的优点在于,它允许你在运行时动态选择要使用的读取和写入 Bean,当你使用 JVM 的时候。然而,当你使用本机编译时,你必须在构建时间而不是运行时确定读取和写入。以下示例演示了这一点:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>process-aot</id>
<goals>
<goal>process-aot</goal>
</goals>
<configuration>
<jvmArguments>
-Dspring.batch.job.flatfileitemreader.name=fooReader
-Dspring.batch.job.flatfileitemwriter.name=fooWriter
</jvmArguments>
</configuration>
</execution>
</executions>
</plugin>
ItemProcessor Configuration
单步批处理作业自动配置接受一个 ItemProcessor
(如果一个在 ApplicationContext
中可用)。如果找到正确的类型(ItemProcessor<Map<String, Object>, Map<String, Object>>
),它将自动接线到该步骤。
Autoconfiguration for ItemWriter implementations
此启动器为与支持的 ItemReader
实现相匹配的 ItemWriter
实现提供自动配置:AmqpItemWriter
、FlatFileItemWriter
、JdbcItemWriter
和 KafkaItemWriter
。本节介绍如何使用自动配置配置受支持的 ItemWriter
。
AmqpItemWriter
要写入 RabbitMQ 队列,您需要两组配置。首先,您需要一个 AmqpTemplate
。获取此配置的最简单方法是使用 Spring Boot 的 RabbitMQ 自动配置。请参见 Spring Boot AMQP documentation。
一旦你配置了 AmqpTemplate
,你就可以通过设置以下属性来配置 AmqpItemWriter
:
Property | Type | Default Value | Description |
---|---|---|---|
|
|
|
如果 |
|
|
|
表明是否应注册 |
FlatFileItemWriter
要将文件作为步骤的输出写入,你可以配置 FlatFileItemWriter
。自动配置接受已经显式配置的组件(如 LineAggregator
、FieldExtractor
、FlatFileHeaderCallback
或 FlatFileFooterCallback
)以及通过设置指定以下属性配置的组件:
Property | Type | Default Value | Description |
---|---|---|---|
|
|
|
要读取的资源。 |
|
|
|
表明输出文件是否为分隔文件。如果 |
|
|
|
表明输出文件是否为格式化文件。如果 |
|
|
|
用于为格式化文件生成输出的格式。格式化操作使用 |
|
|
|
在生成文件时要使用的 |
|
|
0 |
记录的最大长度。如果为 0,则大小不受限制。 |
|
|
0 |
The minimum record length. |
|
|
|
在分隔文件中用于分隔字段的 |
|
|
|
在写入文件时要使用的编码。 |
|
|
|
表明应在刷新时将文件强制同步到磁盘上。 |
|
|
|
从记录中解析的各个字段的名称列表。这些名称是该 |
|
|
|
指示在找到输出文件时是否应追加到文件。 |
|
|
|
要用来分隔输出文件中的行的 |
|
|
|
用于在 |
|
|
|
确定是否应保存状态以便重启。 |
|
|
|
如果设置为 |
|
|
|
如果设置为 |
|
|
|
指示读取器是否是事务队列(表示在失败时,已读项将返回到队列)。 |
JdbcBatchItemWriter
要将步骤的输出写入关系数据库,此启动器提供了自动配置 JdbcBatchItemWriter
的功能。自动配置允许你提供自己的 ItemPreparedStatementSetter
或 ItemSqlParameterSourceProvider
和配置选项,通过设置以下属性:
Property | Type | Default Value | Description |
---|---|---|---|
|
|
|
用于在 |
|
|
|
用于插入每个项的 SQL。 |
|
|
|
是否验证每次插入是否都会导致至少一个记录的更新。 |
你还可以使用以下属性专门为写入器指定 JDBC 数据源:.JdbcBatchItemWriter
属性
Property | Type | Default Value | Description |
---|---|---|---|
|
|
|
确定是否应启用 |
|
|
|
数据库的 JDBC URL。 |
|
|
|
数据库的登录用户名。 |
|
|
|
数据库的登录密码。 |
|
|
|
JDBC 驱动的完全限定名称。 |
|
KafkaItemWriter
要将步骤输出写入 Kafka 主题,您需要 KafkaItemWriter
。此启动器通过使用来自两个位置的设施为 KafkaItemWriter
提供自动配置。第一个是 Spring Boot 的 Kafka 自动配置。(请参见 Spring Boot Kafka documentation。)其次,此启动器允许您在编写器上配置两个属性。
Property | Type | Default Value | Description |
---|---|---|---|
|
|
|
要写入的 Kafka 主题。 |
|
|
|
传递给写手的项是否都作为删除事件发送到主题。 |
有关 KafkaItemWriter
的配置选项的更多信息,请参见 KafkaItemWiter
documentation。
Spring AOT
当将 Spring AOT 与单步批处理启动器一起使用时,你必须在编译时设置读取和写入名称属性(除非你为读取器和/或写入器创建了 Bean)。为此,你必须将希望用作参数或环境变量的读取器和写入器的名称包含在引导 maven 插件或 gradle 插件中。例如,如果你希望在 Maven 中启用 FlatFileItemReader
和 FlatFileItemWriter
,它看起来像:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>process-aot</id>
<goals>
<goal>process-aot</goal>
</goals>
</execution>
</executions>
<configuration>
<arguments>
<argument>--spring.batch.job.flatfileitemreader.name=foobar</argument>
<argument>--spring.batch.job.flatfileitemwriter.name=fooWriter</argument>
</arguments>
</configuration>
</plugin>