Spring Batch - 提交间隔的后期绑定不适用于跳过策略

时间:2014-11-21 16:33:35

标签: spring batch-processing spring-batch

我试图在块的commit-interval属性上使用后期绑定。

当块没有包含skip-policy或retry-policy时,它可以正常工作但是只要添加了skip-policy(甚至是retry-policy),就不会执行commit-interval考虑到并且批处理工作就好像commit-interval设置为1.奇怪的是,当commit-interval是硬编码时,它工作正常......

所以这个配置工作正常:

<chunk reader="multiAccuseReceptionItemReader" 
                   processor="enrichissementPrescriptionItemProcessor"
                   writer="prescriptionItemWriter" 
                   commit-interval="#{jobExecutionContext['commits']}">

这个也很好用:

<chunk reader="multiAccuseReceptionItemReader" 
                   processor="enrichissementPrescriptionItemProcessor"
                   writer="prescriptionItemWriter"
                   skip-policy="skipPolicy"
                   commit-interval="3">

但是这个没有考虑commit-interval并将其设置为1:

<chunk reader="multiAccuseReceptionItemReader" 
                   processor="enrichissementPrescriptionItemProcessor"
                   writer="prescriptionItemWriter"
                   skip-policy="skipPolicy"
                   commit-interval="#{jobExecutionContext['commits']}">

我尝试使用simpleCompletionPolicy而不是commit-interval来使用completion-policy,但更糟糕的是:当有skip-policy或retry-policy时,chunkSize不会被考虑在内,即使它是硬编码的。如果没有任何skip-policy或retry-policy,则会考虑chunkSize(硬编码或后期绑定)。

我使用的是Spring Batch 2.2.0(并且无法改变)。

为什么会这样? 如何使用skip-policy和retry-policy动态设置commit-interval?

1 个答案:

答案 0 :(得分:2)

这是类org.springframework.batch.core.configuration.xml.StepParserStepFactoryBean中的一个已知的spring-batch错误:https://jira.spring.io/browse/BATCH-2096

版本2.2.2中已更正。

所以最好的解决方案是升级到spring-batch的v2.2.2(与2.2.0相同,并修正了一些错误)。

如果 - 像我一样 - 你真的无法升级,那么最好的方法是从git (tag 2.2.2)复制org.springframework.batch.core.configuration.xml.StepParserStepFactoryBean类,将它添加到你的来源和确保在类路径中的spring-batch-core jar之前加载了源代码。