SpringApplication啟動
public static void main(String[] args) {
SpringApplication.run(MySpringConfiguration.class, args);
}
複製程式碼
當應用啟動後,你會看到類似這樣的控制檯輸出:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: v2.0.3.RELEASE
2013-07-31 00:08:16.117 INFO 56603 --- [ main] o.s.b.s.app.SampleApplication : Starting SampleApplication v0.1.0 on mycomputer with PID 56603 (/apps/myapp.jar started by pwebb)
2013-07-31 00:08:16.166 INFO 56603 --- [ main] ationConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@6e5a8246: startup date [Wed Jul 31 00:08:16 PDT 2013]; root of context hierarchy
2014-03-04 13:09:54.912 INFO 41370 --- [ main] .t.TomcatServletWebServerFactory : Server initialized with port: 8080
2014-03-04 13:09:56.501 INFO 41370 --- [ main] o.s.b.s.app.SampleApplication : Started SampleApplication in 2.992 seconds (JVM running for 3.658)
複製程式碼
當應用啟動失敗,FailureAnalyzer
會獲取到錯誤並給出錯誤提示幫助解決問題,例如埠被佔用,你會看到控制檯輸出:
***************************
APPLICATION FAILED TO START
***************************
Description:
Embedded servlet container failed to start. Port 8080 was already in use.
Action:
Identify and stop the process that's listening on port 8080 or configure this application to listen on another port.
複製程式碼
應用事件和監聽(Application Events and Listeners)
springboot除了spring框架的事件,例如 ContextRefreshedEvent
,還有其他的一些應用事件。
一些事件會在ApplicationContext被建立之前觸發,所以你不能註冊監聽到那些@Bean上,因為此時bean還沒有被建立。你可以用SpringApplication.addListeners(…)
這個方法去註冊監聽。
如果你想要自動註冊監聽,不管應用是否被建立,你可以通過META-INF/spring.factories
檔案去新增監聽,例如:org.springframework.context.ApplicationListener=com.example.project.MyListener
。
應用啟動時事件被髮送的順序
ApplicationStartingEvent
在所有處理之前,除了註冊監聽和初始化;ApplicationEnvironmentPreparedEvent
發生在當上下文中使用的環境是已知的,但還沒建立之前;ApplicationPreparedEvent
在重新整理開始之前觸發,但是在bean定義載入之後;ApplicationStartedEvent
在上下文被重新整理之後,在任何應用程式和命令列執行器被呼叫之前;ApplicationReadyEvent
在任何應用程式和命令列執行程式都被呼叫之後。它指示應用程式已準備好服務請求;ApplicationFailedEvent
如果啟動時存在異常會被觸發。
web環境
SpringApplication
試圖為您建立正確型別的應用程式上下文。用於確定WebApplicationType
的演算法相當簡單:
- 如果當前使用的springMVC,上下文使用
AnnotationConfigServletWebServerApplicationContext
; - 如果當前使用的不是springMVC而是Spring WebFlux,上下文使用
AnnotationConfigReactiveWebServerApplicationContext
- 否則,使用
AnnotationConfigApplicationContext
。
下一篇上原始碼。。。