spring boot學習(3): SpringApplication 事件監聽
spring application listener
在spring
框架中,有多種事件, 這些時間會在不同的執行時刻釋出,來通知監聽者。本文僅僅介紹SpringApplicationEvent
的事件的監聽。
事件型別
EventType | 釋出時間 |
---|---|
ApplicationContextInitializedEvent
|
在SpringApplication
正在啟動,ApplicationContext
已經準備好了,ApplicationContextInitializers
被呼叫,bean definitions
被載入之前 |
ApplicationStartingEvent
|
在一次啟動之前釋出 |
ApplicationEnvironmentPreparedEvent
|
在Environment
準備好之後,會有context
去使用這一Environment
, 會在context
建立之前發出 |
ApplicationPreparedEvent
|
會在bean definitions
載入之後,refresh
之前釋出 |
ApplicationStartedEvent
|
context
更新之後,任何應用或命令列啟動呼叫之前 |
ApplicationReadyEvent
|
任何應用或命令列啟動呼叫之後釋出,說明應用已經可以被請求了 |
ApplicationFailedEvent
|
啟動發生有異常時發步 |
如何監聽
-
監聽器需要使用
org.springframework.context.ApplicationListener
這個介面的例項, 其宣告如下:
@FunctionalInterface public interface ApplicationListener<E extends ApplicationEvent> extends EventListener { /** * Handle an application event. * @param event the event to respond to */ void onApplicationEvent(E event); }
-
需要使用
SpringApplication.addListeners(…)
或SpringApplicationBuilder.listeners(…)
來新增監聽器。也可以在META-INF/spring.factories
檔案中配置:org.springframework.context.ApplicationListener=com.example.project.MyListener
。
例子:
public class StartingEventListener implements ApplicationListener<ApplicationStartingEvent> { @Override public void onApplicationEvent(ApplicationStartingEvent applicationStartingEvent) { System.out.println("called own starting listener"); System.out.println(applicationStartingEvent.getClass()); } }
@SpringBootApplication public class DemoApplication { public static void main(String[] args){ SpringApplication application = new SpringApplication(DemoApplication.class); application.addListeners(new StartingEventListener()); application.run(args); } }
終端執行jar
包:
$ java -jar build/libs/springlisteners-0.0.1-SNAPSHOT.jar called own starting listener class org.springframework.boot.context.event.ApplicationStartingEvent ._______ _ _ /\\ / ___'_ __ _ _(_)_ ____ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/___)| |_)| | | | | || (_| |) ) ) ) '|____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot ::(v2.1.3.RELEASE)