SpringBatch之JobParameter
JobParameter
1.1 设置 JobParameter
obLauncher.run(job, new JobParametersBuilder()
.addString("para1", "value1")
.addString("para2","value2")
.toJobParameters()
);
1.1 ItemReader, ItemWriter, ItemProcessor中读取JobParameter中的参数,
1.1.1 注解方式获取
(1) 使用 @BeforeStep,如下示例
public class PersonItemProcessor implements ItemProcessor<Person, Person> {
JobParameters jobParameters;
@BeforeStep
public void beforeStep(final StepExecution stepExecution) {
jobParameters = stepExecution.getJobParameters();
log.info("jobParameters: {}", jobParameters);
}
(2) @Value直接注入
以processor为例,
public class PersonItemProcessor implements ItemProcessor<Person, Person> {
@Value("#{jobParameters['dataUnitId']}")
private Long dataUnitId;
注意:这里要**使用@StepScope(等价于@Scope(“step”)**注解,把ItemReader, ItemWriter, ItemProcessor的 scope 声明成StepScope。
1.1.2 xml配置方式获取
<bean:bean id="itemReader" class="com.wanggc.springbatch.BatchItemReader" scope="step">
<bean:property name="filePath" value="#{jobParameters['inputFilePath']}" />
</bean:bean>
注意这里的 scope=“step” , 设置Bean的scope属性为step,这是SpringBatch的一个后绑定技术,就是在生成Step的时候,才去创建bean,因为这个时候jobparameter才传过来。如果加载配置信息的时候就创建bean,这个时候jobparameter的值还没有产生,会抛出异常。