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

2024-04-16

我正在尝试对块的提交间隔属性使用后期绑定。

当块不包含跳过策略或重试策略时,它可以正常工作,但是一旦添加了跳过策略(甚至是重试策略),就不会考虑提交间隔并且批处理就像提交间隔设置为 1 一样工作。奇怪的是,当提交间隔被硬编码时,它工作得很好......

所以这个配置工作正常:

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

这个也很好用:

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

但这没有考虑提交间隔并将其设置为 1 :

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

我尝试使用 simpleCompletionPolicy 的完成策略而不是提交间隔,但更糟糕的是:当存在跳过策略或重试策略时,不会考虑 chunkSize,即使它是硬编码的。如果没有任何跳过策略或重试策略,则会考虑 chunkSize(硬编码或后期绑定)。

我正在使用 Spring Batch 2.2.0(并且无法更改)。

为什么会有这种行为? 如何使用跳过策略和重试策略动态设置提交间隔?


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

已在 2.2.2 版本中修正。

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

如果 - 像我一样 - 你真的无法升级,那么最好的方法是复制 org.springframework.batch.core.configuration.xml.StepParserStepFactoryBean 类git(标签 2.2.2) https://github.com/spring-projects/spring-batch/blob/2.2.2.RELEASE/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/StepParserStepFactoryBean.java,将其添加到您的源代码中,并确保您的源代码在类路径中的 spring-batch-core jar 之前加载。

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

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

随机推荐