【发布时间】:2014-08-13 22:01:09
【问题描述】:
使用基于 Spring Batch xml 的配置,您可以参数化提交间隔/块大小,例如:
<job id="basicSimpleJob"
xmlns="http://www.springframework.org/schema/batch">
<step id="basicSimpleStep" >
<tasklet>
<chunk
reader="reader"
processor="processor"
writer="writer"
commit-interval="#{jobParameters['commit.interval']}">
</chunk>
</tasklet>
</step>
</job>
使用基于 javaconfig 的配置它可能看起来像
@Bean
public Step step(
ItemStreamReader<Map<String, Object>> reader,
ItemWriter<Map<String, Object>> writer,
@Value("#{jobParameters['commit.interval']}") Integer commitInterval
) throws Exception {
return steps
.get("basicSimpleStep")
.<Map<String, Object>, Map<String, Object>>chunk(commitInterval)
.reader(reader)
.processor(new FilterItemProcessor())
.writer(writer)
.build();
}
但它不起作用,我也得到了
原因: org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0): 找不到属性或字段“jobParameters” 类型的对象 'org.springframework.beans.factory.config.BeanExpressionContext' - 也许不公开?
或者 - 使用 @StepScope 作为 step bean -
原因:java.lang.IllegalStateException:没有上下文持有者 可用于步进范围
我知道我有一个工作的 stepscope,其他 stepscoped bean 工作(定义在与 step 相同的类中)
现在我使用 CompletionPolicy,它可以与 stepScope 一起使用,但我想知道是否有人让它以“正常”的方式工作,或者是否是 JIRA 票的时候了
【问题讨论】:
标签: spring-batch spring-java-config