使用基于 Spring Batch xml 的配置,您可以参数化提交间隔/ block 大小,例如:
<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();
}
但它不起作用,我也得到
Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0): Property or field 'jobParameters' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext' - maybe not public?
或者 - 在使用 @StepScope 作为 step bean 时 -
Caused by: java.lang.IllegalStateException: No context holder available for step scope
我知道我有一个工作的 stepscope,其他 stepscoped bean 工作(在与 step 相同的类中定义)
现在我使用 CompletionPolicy 可以与 stepScope 一起使用,但我想知道是否有人让它以“正常”方式工作,或者是时候购买 JIRA 票了
... 创建于 https://jira.spring.io/browse/BATCH-2263
最佳答案
在 Spring Batch 3 中将 @JobScope 注释添加到 Step 定义中:
@Bean
@JobScope
public Step step(
ItemStreamReader<Map<String, Object>> reader,
ItemWriter<Map<String, Object>> writer,
@Value("#{jobParameters['commit.interval']}") Integer commitInterval
)
这将在作业执行时初始化 step bean,因此在这种情况下,jobParameters 的后期绑定(bind)是有效的。
关于spring-batch - Spring Batch Javaconfig - 参数化提交间隔又名 block 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24373110/