spring boot學習(3): SpringApplication 事件監聽

工號1024發表於2019-03-16

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 啟動發生有異常時發步

如何監聽

  1. 監聽器需要使用 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);
}
複製程式碼
  1. 需要使用 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)
複製程式碼

相關文章