Spring Batch中@StepScope的适用范围及理解

一.说明:

使用Spring Batch批处理框架时,由于初期不理解该注解的使用范围导致走了一些弯路.特此记录batch框架中特有的bean作用范围注解@StepScope的使用注意事项:
在此之前,先说一下IOC容器中几种bean的作用范围:

  • a.singleton单例模式 – 全局有且仅有一个实例
  • b.prototype原型模式 – 每次获取Bean的时候会有一个新的实例
  • c.request – request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效
  • d.session – session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效
  • e.globalsession – global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义

二.@StepScope注解:

Spring batch框架只有在批处理时才需要实例化job以及对应的最底层处理单位(reader,processor,writer,tasklet)且 在job启动后的运行参数一旦确定便无法修改。
为了使每一次启动job时使处理单位的参数可以动态修改(比如第一次job启动时参数tranDate=“20210101”,第二次job参数启动时参数改为tranDate=“20210102”).
所以设计了@StepScope配合@Value("#{jobParameters[‘contractInfoDat’]}") 从job的启动参数中获取所需参数。

三.使用注意事项:

  1. 只能用在最底层处理单位(reader,processor,writer,tasklet)的方法上,配合@Bean使用。
  2. 被@StepScope注解修饰的bean只会在job启动时进行初始化,job处理完成后便会被销毁
    (也就是说被@StepScope注解所修饰bean的生命周期与job的生命周期保持同步 (经指正:“是和Step一致,同一个Step执行两次你会发现Writer创建了两次”))
	@Bean
    @StepScope
    public FlatFileItemWriter<Map> contInfoMyItemWriter(@Value("#{jobParameters['contractInfoDat']}") String contractInfoDat) {
        return getGbkFlatFileItemWriter(contractInfoDat);
    }
  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

b0b0大魔王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值