春季批处理提交频率

时间:2019-04-10 14:20:30

标签: spring-boot spring-batch

我有一个春季批处理步骤,该步骤从文件读取,处理记录并使用卡盘处理将其写入文件。该文件有望包含数百万条大记录。我读到Spring在将其传递给写入器之前,在内存中保存了[chunk-size]个已处理记录数。

为优化内存使用量,我将[chunk-size]保持较小。但是,这增加了该步骤对BATCH_STEP_EXECUTION元数据表所做的更新次数,以更新读取和提交计数。

鉴于我正在读写本地文件,因此对远程数据库服务器的更新相对昂贵。如果增加[块大小],则内存使用量会增加。

提交频率与编写本地文件无关紧要,因此元数据更新对我来说是个问题。该步骤是可重新启动的,因此从技术上讲,我无需记录中间提交计数。

我可以仅将地图或内存数据库用于JobRepository,但是我需要其他信息,例如开始/结束时间持续存在,而且这种担心仅是一步之遥。

是否有任何配置参数可以关闭对作业存储库的中间提交计数更新,或者说仅以块大小/提交频率进行提交,从而将块记录从内存中更早地写到存储中。基本上,我正在寻找是否有一些东西可以将块大小与提交频率区分开来。

1 个答案:

答案 0 :(得分:0)

您可以通过在作业存储库中使用MapJobRepositoryFactoryBean直接跳过元数据更新

 <bean id="jobRepository"
    class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">
    <property name="transactionManager" ref="transactionManager" />
  </bean>

这些答案可能对您有帮助

BATCH_WITHOUT_PERSISTING_METADATA

SKIP_METADATA_SAVE_SPRING_BATCH