使用无资源trx管理器的spring批处理作业存储库是否将状态永远保存在内存中



运行最新的Spring 4.1.0和Spring批次3.0.1

Uisng

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

我有一个每隔几秒钟执行一次的作业,这是一个非常基本的ETL作业,检查Db是否有一些数据转换并推送到另一个系统。若什么都不做,它会尝试下一次跑步。

我注意到HasMap对象的内存消耗一直在增加,即使作业没有任何事情可做。那么MapJobRepositoryFactoryBean是否在内存中保持状态呢?我想是…我也尝试了持久化作业存储库,内存消耗保持较低。

出于操作目的和简单性,不关心作业历史记录和作业以前的状态,所以我并不真正需要持久化存储库。我只想每隔几秒钟跑一次。

那么,有没有另一种方法可以自动清理MapJobRepositoryFactoryBean的状态,或者不跟踪完整状态并保持低内存?

是的,基于映射的作业存储库将永远将状态保存在内存中。如javadoc所述(http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/core/repository/support/MapJobRepositoryFactoryBean.html),JobRepository实现实际上并不用于生产。如果您想要一个可以清理的基于内存的JobRepository,请使用内存中的数据库并定期执行清理脚本。

最新更新