Spring Batch 中的步骤范围
本文介绍了 Spring Batch 中 Step Scope 的工作原理。 Spring Batch 具有三个主要的高级组件:应用程序、Batch 核心和 Batch 基础架构。
Spring Batch 中的作业和步骤
作业是封装整个批处理的实体; 即,它位于工作层次结构的顶部。 每项作业都包含一个或多个步骤。
它是步骤实例的容器,其中每个步骤都有一个 ItemReader、ItemProcessor 和 ItemWriter。 作业包含的一些概念包括 JobInstance、JobParameters 和 JobExecution。
步骤是批处理作业的独立域对象,包含定义和控制批处理过程的所有必要信息。 与作业一样,步骤也有一个与作业中的 JobExecution 相关的 StepExecution。
Spring定义了两个作用域,即StepScope和JobScope。
Spring Batch 中的步骤范围
使用后期绑定的 Bean 必须始终以步骤作为范围进行声明。 这可以通过设置scope=“step”来完成,但是step范围不能与step bean一起使用。
如果需要,步骤中的组件应改为步骤范围。 在 Spring Batch 中,作业与 XML 配置文件或基于 Java 的配置连接,该配置称为 JobConfiguration。
下面显示的示例显示了在 XML 和 JAVA 中绑定到步骤范围。
XML 配置:
<bean id="flatFileItemReader" scope="step"
class="org.springframework.batch.item.file.FlatFileItemReader">
<property name="resource" value="#{jobParameters[input.file.name]}" />
</bean>
基于Java的配置:
@StepScope
@Bean
public FlatFileItemReader flatFileItemReader(@Value("
#{jobParameters[input.file.name]}") String name) {
return new FlatFileItemReaderBuilder<Foo>()
.name("flatFileItemReader")
.resource(new FileSystemResource(name))
...
}
StepScope 对象在很多方面都很有用。 原因之一是 StepScope 有助于定义 Bean 的寿命。
默认情况下,bean 范围是单例的。 当bean使用@singleton注释时,它将在开始时创建一次并在结束时销毁,但是StepScope是特定步骤所独有的,而不是单例。
通过将组件指定为 StepScope,spring 容器将为每个步骤启动一个新实例。 步骤范围 bean 的生命周期取决于步骤的生命周期。
在步骤作用域 bean 中,bean 将在每个步骤开始时创建并在每个步骤结束时销毁。 注释是@StepScope。
使用 StepScope 的另一个原因是当步骤并行执行时,因为它将隔离 bean 的状态。 通过这种方式,每个步骤中的每个线程都有自己的实例,并且不会修改其他线程管理的状态。
如果不是,多个线程将改变 bean 的状态,使其不一致。 此外,通过 StepScope,可以在执行参数的后期绑定时通过 stepExecutionContext 和 stepExecutionListener 在步骤之间传递信息。
因此,StepScope 帮助定义 bean 的生命周期并允许我们跨步骤传递数据。 以下示例显示了在 XML 和 JAVA 配置中使用 stepExecutionContext。
XML 配置:
<bean id="flatFileItemReader" scope="step"
class="org.springframework.batch.item.file.FlatFileItemReader">
<property name="resource" value="#{stepExecutionContext['input.file.name']}" />
</bean>
基于Java的配置:
@StepScope
@Bean
public FlatFileItemReader flatFileItemReader(@Value(
"#{stepExecutionContext['input.file.name']}") String name) {
return new FlatFileItemReaderBuilder<Foo>()
.name("flatFileItemReader")
.resource(new FileSystemResource(name))
...
}
我们讨论了 StepScope 对象在 Spring Batch 中的工作原理以及示例。 要了解更多关于Spring Batch的信息,可以参考Spring Batch的官方文档。
相关文章
批处理文件中 % 和 %% 之间的区别
发布时间:2023/08/16 浏览次数:115 分类:操作系统
-
本文介绍了批处理文件中 % 和 %% 之间的区别。 它还讨论了批处理文件和 cmd 中 % 和 %% 的使用,以及环境变量和循环变量。在 CMD 中使用 % 和 %%
使用批处理脚本移动文件
发布时间:2023/08/16 浏览次数:164 分类:操作系统
-
本文将介绍如何使用批处理脚本移动文件。使用批处理脚本移动文件 我们可以通过将文件从源拖放到目标位置来将文件从一个目的地移动到另一个目的地。
批处理脚本中的错误处理
发布时间:2023/08/16 浏览次数:68 分类:操作系统
-
本文将展示如何创建批处理脚本来处理错误和失败。 此外,我们还将提供一些使该主题变得更容易的示例。批处理脚本中的错误处理
使用批处理脚本更改 CMD 文本颜色
发布时间:2023/08/15 浏览次数:157 分类:操作系统
-
本文将首先讨论批处理脚本或批处理文件的基本概念。 介绍完Batch脚本后,我们来讨论一下使用Batch脚本每秒改变CMD的文本颜色的方法。批处理脚本或文件
批量设置命令超时时间
发布时间:2023/08/15 浏览次数:162 分类:操作系统
-
本文将首先讨论批处理脚本中超时命令的概念。 之后,我们将讨论为任何其他命令设置超时命令。批处理脚本中的超时命令 超时是暂停或延迟特定时间段的实用程序。
批量合并 XML 文件
发布时间:2023/08/15 浏览次数:169 分类:操作系统
-
本文将首先讨论并了解XML文件格式。 之后,我们将讨论使用批处理命令和脚本将两个或多个 XML 文件合并为一个文件。XML 文件 XML(也称为可扩展标记语言)是一种用于存储和通信数据的标记语
使用批处理脚本从命令提示符运行 .exe 文件
发布时间:2023/08/15 浏览次数:178 分类:操作系统
-
本文将展示如何使用批处理 (.bat) 脚本运行 .exe 类型的文件。您可以使用两个不同的命令来实现此目的。 让我们在以下部分中讨论每种方法。使用批处理脚本使用标题和位置从命令提示符运行
使用批处理脚本删除早于 N 天的文件
发布时间:2023/08/15 浏览次数:193 分类:操作系统
-
在本文中,我们将使用批处理脚本删除 N 天前的文件。使用批处理脚本删除早于 N 天的文件 执行此任务的代码的一般格式如下所示。
使用批处理脚本删除文件
发布时间:2023/08/15 浏览次数:124 分类:操作系统
-
本文将演示如何使用批处理脚本删除文件。使用批处理脚本删除文件 一般来说,我们可以通过点击删除或者按键盘上的删除按钮来轻松删除文件。