SpringBatch中@StepScope的适⽤范围及理解
⼀.说明:
使⽤Spring Batch批处理框架时,由于初期不理解该注解的使⽤范围导致⾛了⼀些弯路.特此记录batch框架中特有的bean作⽤范围注解
@StepScope的使⽤注意事项:
在此之前,先说⼀下IOC容器中⼏种bean的作⽤范围:
a.singleton单例模式 – 全局有且仅有⼀个实例
b.prototype原型模式 – 每次获取Bean的时候会有⼀个新的实例
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的启动参数中获取所需参数。
spring ioc注解三.使⽤注意事项:
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);
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论