此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 spring-cloud-task 3.1.3spring-doc.cn

单步批处理作业Starters

本节介绍如何使用 starter 包含在 Spring Cloud Task 中。此 Starter 允许您使用配置 定义 、 、 或完整的单步 Spring Batch 。 有关 Spring Batch 及其功能的更多信息,请参阅 Spring Batch 文档JobStepItemReaderItemWriterJobspring-doc.cn

要获取 Maven 的 starter,请将以下内容添加到您的构建中:spring-doc.cn

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-single-step-batch-job</artifactId>
    <version>2.3.0</version>
</dependency>

要获取 Gradle 的 starter,请将以下内容添加到您的构建中:spring-doc.cn

compile "org.springframework.cloud:spring-cloud-starter-single-step-batch-job:2.3.0"

定义作业

您可以使用 starter 定义 an 或 an 或完整 . 在本节中,我们将定义配置 .ItemReaderItemWriterJobJobspring-doc.cn

性能

首先,Starter 提供了一组属性,允许您通过一个 Step 配置 Job 的基础知识:spring-doc.cn

表 1.作业属性
财产 类型 默认值 描述

spring.batch.job.jobNamespring-doc.cn

Stringspring-doc.cn

nullspring-doc.cn

作业的名称。spring-doc.cn

spring.batch.job.stepNamespring-doc.cn

Stringspring-doc.cn

nullspring-doc.cn

步骤的名称。spring-doc.cn

spring.batch.job.chunkSizespring-doc.cn

Integerspring-doc.cn

nullspring-doc.cn

每个交易要处理的项目数。spring-doc.cn

配置上述属性后,您将拥有一个具有单个基于块的步骤的作业。 这个基于数据块的步骤读取、处理和写入实例,作为 项目。但是,该步骤尚未执行任何操作。您需要配置一个 、 optional 和 an 给它一些事情做。配置一个 其中,您可以使用 properties 并配置已提供的 auto配置,或者您可以使用标准的 Spring 配置来配置自己的 机制。Map<String, Object>ItemReaderItemProcessorItemWriterspring-doc.cn

如果您配置自己的类型,则输入和输出类型必须与步骤中的其他类型匹配。 此 starter 中的 implementations 和 implementations 都使用 a 作为 input 和 output 项。ItemReaderItemWriterMap<String, Object>

ItemReader 实现的自动配置

此 Starter 为四种不同的实施提供自动配置: 、 、 和 。 在本节中,我们将概述如何使用提供的 autoconfiguration 的ItemReaderAmqpItemReaderFlatFileItemReaderJdbcCursorItemReaderKafkaItemReaderspring-doc.cn

AmqpItemReader

您可以使用 AMQP 从队列或主题中读取。这 此实现的 autoconfiguration 依赖于两组 配置。第一个是 .您可以 自己配置或使用 Spring Boot 提供的自动配置。请参阅 Spring Boot AMQP 文档。 配置 后,您可以启用批处理功能来支持它 通过设置以下属性:AmqpItemReaderItemReaderAmqpTemplateAmqpTemplatespring-doc.cn

表 2. 性能AmqpItemReader
财产 类型 默认值 描述

spring.batch.job.amqpitemreader.enabledspring-doc.cn

booleanspring-doc.cn

falsespring-doc.cn

如果 ,将执行自动配置。truespring-doc.cn

spring.batch.job.amqpitemreader.jsonConverterEnabledspring-doc.cn

booleanspring-doc.cn

truespring-doc.cn

指示是否应注册 以解析消息。Jackson2JsonMessageConverterspring-doc.cn

有关更多信息,请参阅 AmqpItemReader 文档spring-doc.cn

FlatFileItemReader

FlatFileItemReader允许您从平面文件(如 CSV 和其他文件格式)。要从文件中读取数据,您可以提供一些组件 您自己通过正常的 Spring 配置 ( 、 、 、 或 )。您还可以使用 以下属性来配置读取器:LineTokenizerRecordSeparatorPolicyFieldSetMapperLineMapperSkippedLinesCallbackspring-doc.cn

表 3. 性能FlatFileItemReader
财产 类型 默认值 描述

spring.batch.job.flatfileitemreader.saveStatespring-doc.cn

booleanspring-doc.cn

truespring-doc.cn

确定是否应保存状态以供重新启动。spring-doc.cn

spring.batch.job.flatfileitemreader.namespring-doc.cn

Stringspring-doc.cn

nullspring-doc.cn

用于在 .ExecutionContextspring-doc.cn

spring.batch.job.flatfileitemreader.maxItemcountspring-doc.cn

intspring-doc.cn

Integer.MAX_VALUEspring-doc.cn

要从文件中读取的最大项目数。spring-doc.cn

spring.batch.job.flatfileitemreader.currentItemCountspring-doc.cn

intspring-doc.cn

0spring-doc.cn

已读取的项目数。在重新启动时使用。spring-doc.cn

spring.batch.job.flatfileitemreader.commentsspring-doc.cn

List<String>spring-doc.cn

空列表spring-doc.cn

一个 Strings 列表,指示文件中的注释行(要忽略的行)。spring-doc.cn

spring.batch.job.flatfileitemreader.resourcespring-doc.cn

Resourcespring-doc.cn

nullspring-doc.cn

要读取的资源。spring-doc.cn

spring.batch.job.flatfileitemreader.strictspring-doc.cn

booleanspring-doc.cn

truespring-doc.cn

如果设置为 ,则读取器在找不到资源时引发异常。truespring-doc.cn

spring.batch.job.flatfileitemreader.encodingspring-doc.cn

Stringspring-doc.cn

FlatFileItemReader.DEFAULT_CHARSETspring-doc.cn

读取文件时要使用的编码。spring-doc.cn

spring.batch.job.flatfileitemreader.linesToSkipspring-doc.cn

intspring-doc.cn

0spring-doc.cn

指示在文件开头要跳过的行数。spring-doc.cn

spring.batch.job.flatfileitemreader.delimitedspring-doc.cn

booleanspring-doc.cn

falsespring-doc.cn

指示文件是否为带分隔符的文件 (CSV 和其他格式)。此属性中只有一个 或 可以同时存在。spring.batch.job.flatfileitemreader.fixedLengthtruespring-doc.cn

spring.batch.job.flatfileitemreader.delimiterspring-doc.cn

Stringspring-doc.cn

DelimitedLineTokenizer.DELIMITER_COMMAspring-doc.cn

如果读取分隔文件,则指示要解析的分隔符。spring-doc.cn

spring.batch.job.flatfileitemreader.quoteCharacterspring-doc.cn

charspring-doc.cn

DelimitedLineTokenizer.DEFAULT_QUOTE_CHARACTERspring-doc.cn

用于确定用于引用值的字符。spring-doc.cn

spring.batch.job.flatfileitemreader.includedFieldsspring-doc.cn

List<Integer>spring-doc.cn

空列表spring-doc.cn

一个索引列表,用于确定要包含在项目中的记录中的哪些字段。spring-doc.cn

spring.batch.job.flatfileitemreader.fixedLengthspring-doc.cn

booleanspring-doc.cn

falsespring-doc.cn

指示是否按列号解析文件的记录。此属性中只有一个 或 可以同时存在。spring.batch.job.flatfileitemreader.delimitedtruespring-doc.cn

spring.batch.job.flatfileitemreader.rangesspring-doc.cn

List<Range>spring-doc.cn

空列表spring-doc.cn

用于解析固定宽度记录的列范围列表。请参阅 Range 文档spring-doc.cn

spring.batch.job.flatfileitemreader.namesspring-doc.cn

String []spring-doc.cn

nullspring-doc.cn

从记录中解析的每个字段的名称列表。这些名称是从此返回的项目中的键。Map<String, Object>ItemReaderspring-doc.cn

spring.batch.job.flatfileitemreader.parsingStrictspring-doc.cn

booleanspring-doc.cn

truespring-doc.cn

如果设置为 ,则如果无法映射字段,则映射将失败。truespring-doc.cn

JdbcCursorItemReader

对关系数据库运行查询并迭代 生成的 cursor () 来提供结果项。此 autoconfiguration 允许您提供 A 、 A 或两者。你 还可以使用以下属性来配置 :JdbcCursorItemReaderResultSetPreparedStatementSetterRowMapperJdbcCursorItemReaderspring-doc.cn

表 4. 性能JdbcCursorItemReader
财产 类型 默认值 描述

spring.batch.job.jdbccursoritemreader.saveStatespring-doc.cn

booleanspring-doc.cn

truespring-doc.cn

确定是否应保存状态以供重新启动。spring-doc.cn

spring.batch.job.jdbccursoritemreader.namespring-doc.cn

Stringspring-doc.cn

nullspring-doc.cn

用于在 .ExecutionContextspring-doc.cn

spring.batch.job.jdbccursoritemreader.maxItemcountspring-doc.cn

intspring-doc.cn

Integer.MAX_VALUEspring-doc.cn

要从文件中读取的最大项目数。spring-doc.cn

spring.batch.job.jdbccursoritemreader.currentItemCountspring-doc.cn

intspring-doc.cn

0spring-doc.cn

已读取的项目数。在重新启动时使用。spring-doc.cn

spring.batch.job.jdbccursoritemreader.fetchSizespring-doc.cn

intspring-doc.cn

对驱动程序的提示,用于指示每次调用数据库系统要检索的记录数。为了获得最佳性能,您通常需要将其设置为与 chunk 大小匹配。spring-doc.cn

spring.batch.job.jdbccursoritemreader.maxRowsspring-doc.cn

intspring-doc.cn

要从数据库中读取的最大项目数。spring-doc.cn

spring.batch.job.jdbccursoritemreader.queryTimeoutspring-doc.cn

intspring-doc.cn

查询超时的毫秒数。spring-doc.cn

spring.batch.job.jdbccursoritemreader.ignoreWarningsspring-doc.cn

booleanspring-doc.cn

truespring-doc.cn

确定读取器在处理时是否应忽略 SQL 警告。spring-doc.cn

spring.batch.job.jdbccursoritemreader.verifyCursorPositionspring-doc.cn

booleanspring-doc.cn

truespring-doc.cn

指示是否应在每次读取后验证游标的位置,以验证游标是否未前进。RowMapperspring-doc.cn

spring.batch.job.jdbccursoritemreader.driverSupportsAbsolutespring-doc.cn

booleanspring-doc.cn

falsespring-doc.cn

指示驱动程序是否支持游标的绝对定位。spring-doc.cn

spring.batch.job.jdbccursoritemreader.useSharedExtendedConnectionspring-doc.cn

booleanspring-doc.cn

falsespring-doc.cn

指示连接是否与其他处理共享(因此是事务的一部分)。spring-doc.cn

spring.batch.job.jdbccursoritemreader.sqlspring-doc.cn

Stringspring-doc.cn

nullspring-doc.cn

要从中读取的 SQL 查询。spring-doc.cn

您还可以使用以下属性专门为读取器指定 JDBC DataSource: .性能JdbcCursorItemReaderspring-doc.cn

财产 类型 默认值 描述

spring.batch.job.jdbccursoritemreader.datasource.enablespring-doc.cn

booleanspring-doc.cn

falsespring-doc.cn

确定是否应启用。JdbcCursorItemReaderDataSourcespring-doc.cn

jdbccursoritemreader.datasource.urlspring-doc.cn

Stringspring-doc.cn

nullspring-doc.cn

数据库的 JDBC URL。spring-doc.cn

jdbccursoritemreader.datasource.usernamespring-doc.cn

Stringspring-doc.cn

nullspring-doc.cn

数据库的登录用户名。spring-doc.cn

jdbccursoritemreader.datasource.passwordspring-doc.cn

Stringspring-doc.cn

nullspring-doc.cn

数据库的登录密码。spring-doc.cn

jdbccursoritemreader.datasource.driver-class-namespring-doc.cn

Stringspring-doc.cn

nullspring-doc.cn

JDBC 驱动程序的完全限定名称。spring-doc.cn

如果未指定 ,则 将使用 default。DataSourceJDBCCursorItemReaderjdbccursoritemreader_datasource

KafkaItemReader

从 Kafka 主题中提取数据分区非常有用,这正是 可以做的事情。要配置 a , two pieces 的配置是必需的。首先,使用 Spring Boot 的 Kafka 配置 Kafka autoconfiguration 是必需的(请参阅 Spring Boot Kafka 文档)。 从 Spring Boot 配置 Kafka 属性后,可以通过设置以下属性来配置自身:KafkaItemReaderKafkaItemReaderKafkaItemReaderspring-doc.cn

表 5. 性能KafkaItemReader
财产 类型 默认值 描述

spring.batch.job.kafkaitemreader.namespring-doc.cn

Stringspring-doc.cn

nullspring-doc.cn

用于在 .ExecutionContextspring-doc.cn

spring.batch.job.kafkaitemreader.topicspring-doc.cn

Stringspring-doc.cn

nullspring-doc.cn

要从中读取的主题的名称。spring-doc.cn

spring.batch.job.kafkaitemreader.partitionsspring-doc.cn

List<Integer>spring-doc.cn

空列表spring-doc.cn

要从中读取的分区索引列表。spring-doc.cn

spring.batch.job.kafkaitemreader.pollTimeOutInSecondsspring-doc.cn

longspring-doc.cn

30spring-doc.cn

操作的超时。poll()spring-doc.cn

spring.batch.job.kafkaitemreader.saveStatespring-doc.cn

booleanspring-doc.cn

truespring-doc.cn

确定是否应保存状态以供重新启动。spring-doc.cn

本机编译

单步批处理的优点是,它允许您在使用 JVM 时动态选择在运行时要使用的读取器和写入器 Bean。 但是,当您使用本机编译时,您必须在构建时而不是运行时确定读取器和写入器。 以下示例执行此操作:spring-doc.cn

<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 配置

单步批处理作业自动配置接受 if 一个 在 .如果找到正确类型的 (),则它是自动装配的 进入步骤。ItemProcessorApplicationContextItemProcessor<Map<String, Object>, Map<String, Object>>spring-doc.cn

ItemWriter 实现的自动配置

此 Starter 为实现提供自动配置,这些 匹配支持的实现:、、 和 。本节 介绍如何使用 autoconfiguration 配置受支持的 .ItemWriterItemReaderAmqpItemWriterFlatFileItemWriterJdbcItemWriterKafkaItemWriterItemWriterspring-doc.cn

AmqpItemWriter 的

要写入 RabbitMQ 队列,您需要两组配置。首先,您需要一个 .最简单的方法是使用 Spring Boot 的 RabbitMQ 自动配置。请参阅 Spring Boot AMQP 文档AmqpTemplatespring-doc.cn

配置 后,您可以通过设置 以下属性:AmqpTemplateAmqpItemWriterspring-doc.cn

表 6. 性能AmqpItemWriter
财产 类型 默认值 描述

spring.batch.job.amqpitemwriter.enabledspring-doc.cn

booleanspring-doc.cn

falsespring-doc.cn

如果 ,则运行自动配置。truespring-doc.cn

spring.batch.job.amqpitemwriter.jsonConverterEnabledspring-doc.cn

booleanspring-doc.cn

truespring-doc.cn

指示是否应注册以转换消息。Jackson2JsonMessageConverterspring-doc.cn

FlatFileItemWriter 的

要将文件写入步骤的输出,您可以配置 。 自动配置接受已明确配置的组件(如 、 、 或 a )和 通过设置指定的以下属性来配置的组件:FlatFileItemWriterLineAggregatorFieldExtractorFlatFileHeaderCallbackFlatFileFooterCallbackspring-doc.cn

表 7. 性能FlatFileItemWriter
财产 类型 默认值 描述

spring.batch.job.flatfileitemwriter.resourcespring-doc.cn

Resourcespring-doc.cn

nullspring-doc.cn

要读取的资源。spring-doc.cn

spring.batch.job.flatfileitemwriter.delimitedspring-doc.cn

booleanspring-doc.cn

falsespring-doc.cn

指示输出文件是否为带分隔符的文件。如果 , 则必须为 。truespring.batch.job.flatfileitemwriter.formattedfalsespring-doc.cn

spring.batch.job.flatfileitemwriter.formattedspring-doc.cn

booleanspring-doc.cn

falsespring-doc.cn

指示输出文件是否为格式化文件。如果 , 则必须为 。truespring.batch.job.flatfileitemwriter.delimitedfalsespring-doc.cn

spring.batch.job.flatfileitemwriter.formatspring-doc.cn

Stringspring-doc.cn

nullspring-doc.cn

用于为格式化文件生成输出的格式。格式设置是使用 .String.formatspring-doc.cn

spring.batch.job.flatfileitemwriter.localespring-doc.cn

Localespring-doc.cn

Locale.getDefault()spring-doc.cn

生成文件时要使用的。Localespring-doc.cn

spring.batch.job.flatfileitemwriter.maximumLengthspring-doc.cn

intspring-doc.cn

0spring-doc.cn

记录的最大长度。如果为 0,则大小不受限制。spring-doc.cn

spring.batch.job.flatfileitemwriter.minimumLengthspring-doc.cn

intspring-doc.cn

0spring-doc.cn

最小记录长度。spring-doc.cn

spring.batch.job.flatfileitemwriter.delimiterspring-doc.cn

Stringspring-doc.cn

,spring-doc.cn

用于分隔文件中的字段。Stringspring-doc.cn

spring.batch.job.flatfileitemwriter.encodingspring-doc.cn

Stringspring-doc.cn

FlatFileItemReader.DEFAULT_CHARSETspring-doc.cn

写入文件时要使用的编码。spring-doc.cn

spring.batch.job.flatfileitemwriter.forceSyncspring-doc.cn

booleanspring-doc.cn

falsespring-doc.cn

指示是否应在刷新时将文件强制同步到磁盘。spring-doc.cn

spring.batch.job.flatfileitemwriter.namesspring-doc.cn

String []spring-doc.cn

nullspring-doc.cn

从记录中解析的每个字段的名称列表。这些名称是此 接收的项的键。Map<String, Object>ItemWriterspring-doc.cn

spring.batch.job.flatfileitemwriter.appendspring-doc.cn

booleanspring-doc.cn

falsespring-doc.cn

指示在找到输出文件时是否应追加文件。spring-doc.cn

spring.batch.job.flatfileitemwriter.lineSeparatorspring-doc.cn

Stringspring-doc.cn

FlatFileItemWriter.DEFAULT_LINE_SEPARATORspring-doc.cn

在输出文件中使用什么来分隔行。Stringspring-doc.cn

spring.batch.job.flatfileitemwriter.namespring-doc.cn

Stringspring-doc.cn

nullspring-doc.cn

用于在 .ExecutionContextspring-doc.cn

spring.batch.job.flatfileitemwriter.saveStatespring-doc.cn

booleanspring-doc.cn

truespring-doc.cn

确定是否应保存状态以供重新启动。spring-doc.cn

spring.batch.job.flatfileitemwriter.shouldDeleteIfEmptyspring-doc.cn

booleanspring-doc.cn

falsespring-doc.cn

如果设置为 ,则在作业完成时将删除空文件(没有输出)。truespring-doc.cn

spring.batch.job.flatfileitemwriter.shouldDeleteIfExistsspring-doc.cn

booleanspring-doc.cn

truespring-doc.cn

如果设置为 ,并且在输出文件应位于的位置找到文件,则会在步骤开始之前将其删除。truespring-doc.cn

spring.batch.job.flatfileitemwriter.transactionalspring-doc.cn

booleanspring-doc.cn

FlatFileItemWriter.DEFAULT_TRANSACTIONALspring-doc.cn

指示读取器是否为事务性队列(指示读取的项目在失败时返回到队列)。spring-doc.cn

JdbcBatchItemWriter

要将步骤的输出写入关系数据库,此Starters提供了以下功能 要自动配置 .自动配置允许您提供 own 或 和 配置选项:JdbcBatchItemWriterItemPreparedStatementSetterItemSqlParameterSourceProviderspring-doc.cn

表 8. 性能JdbcBatchItemWriter
财产 类型 默认值 描述

spring.batch.job.jdbcbatchitemwriter.namespring-doc.cn

Stringspring-doc.cn

nullspring-doc.cn

用于在 .ExecutionContextspring-doc.cn

spring.batch.job.jdbcbatchitemwriter.sqlspring-doc.cn

Stringspring-doc.cn

nullspring-doc.cn

用于插入每个项目的 SQL。spring-doc.cn

spring.batch.job.jdbcbatchitemwriter.assertUpdatesspring-doc.cn

booleanspring-doc.cn

truespring-doc.cn

是否验证每个插入是否导致至少更新一条记录。spring-doc.cn

您还可以使用以下属性专门为写入器指定 JDBC DataSource: .性能JdbcBatchItemWriterspring-doc.cn

财产 类型 默认值 描述

spring.batch.job.jdbcbatchitemwriter.datasource.enablespring-doc.cn

booleanspring-doc.cn

falsespring-doc.cn

确定是否应启用。JdbcCursorItemReaderDataSourcespring-doc.cn

jdbcbatchitemwriter.datasource.urlspring-doc.cn

Stringspring-doc.cn

nullspring-doc.cn

数据库的 JDBC URL。spring-doc.cn

jdbcbatchitemwriter.datasource.usernamespring-doc.cn

Stringspring-doc.cn

nullspring-doc.cn

数据库的登录用户名。spring-doc.cn

jdbcbatchitemwriter.datasource.passwordspring-doc.cn

Stringspring-doc.cn

nullspring-doc.cn

数据库的登录密码。spring-doc.cn

jdbcbatchitemreader.datasource.driver-class-namespring-doc.cn

Stringspring-doc.cn

nullspring-doc.cn

JDBC 驱动程序的完全限定名称。spring-doc.cn

如果未指定 ,则 将使用 default。DataSourceJdbcBatchItemWriterjdbcbatchitemwriter_datasource

KafkaItemWriter

要将步骤输出写入 Kafka 主题,您需要 。这个Starters 使用两个位置的 Facilities 为 a 提供自动配置。 第一个是 Spring Boot 的 Kafka 自动配置。(请参阅 Spring Boot Kafka 文档。 其次,此 starter 允许您在 writer 上配置两个属性。KafkaItemWriterKafkaItemWriterspring-doc.cn

表 9. 性能KafkaItemWriter
财产 类型 默认值 描述

spring.batch.job.kafkaitemwriter.topicspring-doc.cn

Stringspring-doc.cn

nullspring-doc.cn

要写入的 Kafka 主题。spring-doc.cn

spring.batch.job.kafkaitemwriter.deletespring-doc.cn

booleanspring-doc.cn

falsespring-doc.cn

传递给编写器的项目是否全部作为 delete 事件发送到主题。spring-doc.cn

有关 的配置选项的更多信息,请参阅 KafkaItemWiter 文档KafkaItemWriterspring-doc.cn

春季 AOT

将 Spring AOT 与 Single Step Batch Starter 一起使用时,您必须将 reader 和 writer name 属性(除非你为 reader 和 or writer 创建一个 bean)。 为此,您必须包含要用作的 reader 和 writer 的名称 以及 boot maven 插件或 gradle 插件中的参数或环境变量。例如,如果 您希望启用 和 在 Maven 中,它看起来像这样:FlatFileItemReaderFlatFileItemWriterspring-doc.cn

    <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>