Spring整合Quartz遇到記憶體洩露問題
阿新 • • 發佈:2019-01-02
團隊的專案需要做定時任務,於是選擇了Quartz
在整合過程中,遇到了Quartz配置不正確導致記憶體洩露的問題。
當啟動伺服器時,程式是正常的,重啟時,Web容器報錯,無法unregister相應的Bean。
起初並沒有在意,之後發現伺服器記憶體佔用過高,檢視記憶體後,發現有多個Java程序。
於是猜測是執行緒池或Quartz沒有正常關閉。
加入專門關閉執行緒池的Listener後,仍然無法解決問題,於是判斷為Quartz沒有正確被銷燬。解決方法:在Quartz的配置中加入關閉引數,讓Spring容器結束Quartz後再退出
<bean name="startQuertz" lazy-init="false" autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cleanTrigger" />
</list>
</property>
<property name="waitForJobsToCompleteOnShutdown" value="true" />
</bean>