使用无资源trx管理器的spring批处理存储库是否会永久保存在内存中的状态?

时间:2014-10-10 14:56:46

标签: spring spring-batch

运行最新的Spring 4.1.0和spring batch 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的状态,或者不跟踪完整状态并保持内存不足?

1 个答案:

答案 0 :(得分:3)

是的,基于地图的作业存储库将永久保持状态在内存中。正如javadoc所述(http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/core/repository/support/MapJobRepositoryFactoryBean.html),JobRepository实现确实不适合生产使用。如果您想要清理基于JobRepository的内存,请使用内存数据库并定期执行清理脚本。