运行最新的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的状态,或者不跟踪完整状态并保持内存不足?
答案 0 :(得分:3)
是的,基于地图的作业存储库将永久保持状态在内存中。正如javadoc所述(http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/core/repository/support/MapJobRepositoryFactoryBean.html),JobRepository
实现确实不适合生产使用。如果您想要清理基于JobRepository
的内存,请使用内存数据库并定期执行清理脚本。