Spring批处理步骤范围如何工作

时间:2016-08-05 03:49:54

标签: spring spring-batch

我有一个要求,我需要根据其中我得到文件名的其余调用来处理文件,我将它添加到job参数并在创建bean时使用它。

我正在为(读者,编写者)创建步骤范围Bean并使用job参数。我正在一个新线程中开始工作,因为我正在使用asynchronus task exceutor来启动工作,我的问题是bean将如何进行我们定义const example = ({ title, children, description }) => ( {title} ) example.propTypes = { title: PropTypes.string, }

时由spring创建
@StepScope

1 个答案:

答案 0 :(得分:36)

弹簧批StepScope对象是特定步骤唯一的而不是单例。您可能知道,Spring中的默认bean范围是单例。但是通过指定弹簧批处理组件为StepScope意味着Spring Batch将使用spring容器为每个步骤执行实例化该组件的新实例。

这对于执行参数后期绑定通常很有用,其中参数可以在StepContextJobExecutionContext级别指定,并且需要替换占位符,就像使用文件名的示例一样要求。

使用StepScope的另一个有用的原因是当您决定在并行步骤中重用相同的组件时。如果组件管理任何内部状态,则重要的是它基于StepScope,以便一个线程不会损害另一个线程管理的状态(例如,给定步骤的每个线程都有自己的{{1组件)。