1. 程式人生 > 實用技巧 >springboot學習(九)自動裝配和Actuator

springboot學習(九)自動裝配和Actuator

自動裝配

Spring Boot大量使用XxxAutoConfiguration來使得許多元件被自動化配置並建立,而這些建立過程又大量使用了Spring的Conditional功能

當我們引入spring-boot-starter-jdbc,Spring Boot啟動時會自動掃描所有的XxxAutoConfiguration

  • DataSourceAutoConfiguration:自動建立一個DataSource,其中配置項從application.ymlspring.datasource讀取;

  • DataSourceTransactionManagerAutoConfiguration

    :自動建立了一個基於JDBC的事務管理器;

  • 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,但處於安全原因,只有healthinfo會暴露給Web。Actuator提供的所有訪問點均在官方文件列出,要暴露更多的訪問點給Web,需要在application.yml中加上配置:

management:
endpoints:
web:
exposure:
include: info, health, beans, env, metrics

要特別注意暴露的URL的安全性,例如,/actuator/env可以獲取當前機器的所有環境變數,不可暴露給公網。

actuaor配置

management:
# 端點資訊介面使用的埠,為了和主系統介面使用的埠進行分離
server:
port: 8090
servlet:
context-path: /sys
# 端點健康情況,預設值"never",設定為"always"可以顯示硬碟使用情況和執行緒情況
endpoint:
health:
show-details: always
# 設定端點暴露的哪些內容,預設["health","info"],設定"*"代表暴露所有可訪問的端點
endpoints:
web:
exposure:
include: '*'