使用基于 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 的配置could看起来像
@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' -
也许不公开?
或者 - 当对步骤 bean 使用 @StepScope 时 -
引起原因:java.lang.IllegalStateException:没有上下文持有者
可用于步骤范围
我知道我有一个工作的stepscope,其他stepscoped beans工作(在与step相同的类中定义)
现在我使用的 CompletionPolicy 确实可以与 stepScope 一起使用,但我想知道是否有人让它以“正常”方式工作,或者是否是时候购买 JIRA 票证
...创建于https://jira.spring.io/browse/BATCH-2263