Spring Batch Javaconfig - 参数化提交间隔又名块大小

2023-12-07

使用基于 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


将 @JobScope 注释添加到步骤定义在 Spring Batch 3 中有效:

@Bean
@JobScope
public Step step(
        ItemStreamReader<Map<String, Object>> reader,
        ItemWriter<Map<String, Object>> writer,
        @Value("#{jobParameters['commit.interval']}") Integer commitInterval
)

这将在作业执行时初始化步骤 bean,因此 jobParameters 的后期绑定在这种情况下起作用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Batch Javaconfig - 参数化提交间隔又名块大小 的相关文章

随机推荐