想在spring啓動時自動調用一些db操做做緩存,因而在service實現ApplicationListener 接口。spring
並重寫onApplicationEvent操做。這樣就實現了要求,代碼以下:緩存
@Service @Scope("singleton") public class MasterServiceImpl implements ApplicationListener { public void onApplicationEvent(ApplicationEvent arg0) { 一些DB操做 } }
因爲咱們是spring託管事務,而且採用注入方式調用。code
這樣的寫法帶來了一些問題,正常的action注入service調用的時候再事務範圍內,出事務的時候會對DB鏈接進行釋放,接口
由於是這個service是系統啓動直接調用的這些方法,不在事務管理範圍內,因而這些DB的操做沒有進行DB鏈接釋放(關閉)。事務
解決辦法是,寫一個專門的action實現ApplicationListener 接口,在這個action從新的onApplicationEvent方法內,io
調用該單例service,從而實現事務的入口登記,在出事務的時候就能夠自動釋放鏈接了。ast