javascript
Spring Boot————Web应用启动时自动执行ApplicationListener用法
原文:《web服務啟動spring自動執行ApplicationListener的用法》
引言
我們知道,一般來說一個項目啟動時需要加載或者執行一些特殊的任務來初始化系統,通常的做法就是用servlet去初始化,但是servlet在使用Spring bean時不能直接注入,還需要在web.xml配置,比較麻煩。今天介紹一下使用spring啟動初始化的方法。其實很簡單,只需兩步就可以了。
在開發時有時候需要在整個應用開始運行時執行一些特定代碼,比如初始化環境,準備測試數據、加載一些數據到內存等等。
在spring中可以通過ApplicationListener來實現相關的功能,加載完成后觸發contextrefreshedevent事件(上下文件刷新事件)
但是這個時候,會存在一個問題,在web 項目中(spring mvc),系統會存在兩個容器,一個是root application context?,另一個就是我們自己的?projectName-servlet? context(作為root application context的子容器)。
這種情況下,就會造成onApplicationEvent方法被執行兩次。為了避免上面提到的問題,我們可以只在root application context初始化完成后調用邏輯代碼,其他的容器的初始化完成,則不做任何處理,修改后代碼。
實現方式
1、實現ApplicationListener接口:
public class Init implements ApplicationListener<ContextRefreshedEvent>{@Overridepublic void onApplicationEvent(ContextRefreshedEvent event) {//root application context 沒有parentif(event.getApplicationContext().getDisplayName().equals("RootWebApplicationContext")){//TODO 這里寫下將要初始化的內容}} }2、將Init類注冊到Spring 容器中
@Configuration public class ListenerConfig {@Beanpublic Init init() {return new Init();} }或通過注解方式:
@Component public class Init implements ApplicationListener<ContextRefreshedEvent> {// 省略內部代碼 }二次調用問題
上面第一步中的實現代碼已經通過判斷父容器來解決了二次調用的問題,關于二次調用的解釋,可以參考下面這篇文章:
《Spring ApplicationListener使用方法及問題》
總結
以上是生活随笔為你收集整理的Spring Boot————Web应用启动时自动执行ApplicationListener用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: a标签跳转后返回原页面 layui_la
- 下一篇: JVM004_字节码指令简介