Spring的ApplicationListener 接口及事務管理

想在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

相關文章
相關標籤/搜索