springboot學習(九)自動裝配和Actuator
自動裝配
Spring Boot大量使用XxxAutoConfiguration
當我們引入spring-boot-starter-jdbc
,Spring Boot啟動時會自動掃描所有的XxxAutoConfiguration
:
-
DataSourceAutoConfiguration
:自動建立一個DataSource
,其中配置項從application.yml
的spring.datasource
讀取; -
DataSourceTransactionManagerAutoConfiguration
-
JdbcTemplateAutoConfiguration
:自動建立了一個JdbcTemplate
。
當我們引入spring-boot-starter-web
時,自動建立了:
-
ServletWebServerFactoryAutoConfiguration
:自動建立一個嵌入式Web伺服器,預設是Tomcat; -
DispatcherServletAutoConfiguration
:自動建立一個DispatcherServlet
; -
HttpEncodingAutoConfiguration
:自動建立一個CharacterEncodingFilter
-
WebMvcAutoConfiguration
:自動建立若干與MVC相關的Bean -
...
Spring Boot自動裝配功能是通過自動掃描+條件裝配實現的,這一套機制在預設情況下工作得很好,但是,如果我們要手動控制某個Bean的建立,就需要詳細地瞭解Spring Boot自動建立的原理,很多時候還要跟蹤XxxAutoConfiguration
,以便設定條件使得某個Bean不會被自動建立。
使用Actuator
在生產環境中,需要對應用程式的狀態進行監控。前面我們已經介紹了使用JMX對Java應用程式包括JVM進行監控,使用JMX需要把一些監控資訊以MBean的形式暴露給JMX Server,而Spring Boot已經內建了一個監控功能,它叫Actuator。
使用Actuator非常簡單,只需新增如下依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
然後正常啟動應用程式,Actuator會把它能收集到的所有資訊都暴露給JMX。此外,Actuator還可以通過URL/actuator/
掛載一些監控點,例如,輸入http://localhost:8080/actuator/health
,我們可以檢視應用程式當前狀態:
{
"status": "UP"
}
許多閘道器作為反向代理需要一個URL來探測後端叢集應用是否存活,這個URL就可以提供給閘道器使用。
Actuator預設把所有訪問點暴露給JMX,但處於安全原因,只有health
和info
會暴露給Web。Actuator提供的所有訪問點均在官方文件列出,要暴露更多的訪問點給Web,需要在application.yml
中加上配置:
management
要特別注意暴露的URL的安全性,例如,/actuator/env
可以獲取當前機器的所有環境變數,不可暴露給公網。
actuaor配置
management