spring-batch - Spring Batch Javaconfig - 参数化提交间隔又名 block 大小

标签 spring-batch spring-java-config

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

相关文章:

java - 在java中处理/读取.BAI2文件

java - LambdaMessageProcessor 无法识别 ConversionService 的负载类型

java - 使用单个注释在根和调度程序应用程序上下文中自动配置 beans

java - Spring 批量 & ORA-01792 : maximum number of columns in a table or view is 1000

spring-batch - 如何将上一步数据传递给分区程序

spring - 在spring或spring security中配置cookie头的Domain属性

spring - 如何在java配置文件(非XML)中启用Spring MVC应用程序支持的异步

java - 如何解析大型复杂的xml

java - Spring Tx 错误