Spring Batch定时任务运行时,Reader/Processor/Writer Bean是否每次新建?
Spring Batch调度时Reader/Processor/Writer Bean的复用逻辑
默认情况下,Spring容器里的Bean(包括你的Reader、Processor、Writer)都是单例作用域——也就是应用启动时创建一次,之后每次调度触发任务运行,都会复用这个已经创建好的实例。
但这里有几个关键例外需要注意:
- 如果你给这些组件添加了Spring Batch提供的
@StepScope注解:每次Step执行(也就是每次调度触发的任务)都会创建一个新的实例。这个作用域是专门为Spring Batch设计的,用来实现Step级别的状态隔离、动态参数注入(比如从JobParameters中获取运行时参数),适合有状态或者需要每次运行加载不同配置的组件。 - 如果手动配置了
@Scope("prototype"):每次从Spring容器获取该Bean时都会创建新实例,但这种方式在Spring Batch场景下不如@StepScope适配性好,因为StepScope会和Batch的执行上下文自动绑定。
需要提醒的是:如果使用单例作用域,必须确保你的Reader/Processor/Writer是无状态的,或者每次任务运行前能重置内部状态,否则多次调度运行可能会出现数据污染、状态残留的问题。
内容的提问来源于stack exchange,提问作者Aniruddha Gayake
相关产品推荐
相关产品推荐

