在傳統Spring應用中使用spring-boot-actuator模組提供監控端點
在之前釋出的《Spring Boot Actuator監控端點小結》一文中,我們介紹了Spring Boot Actuator模組為應用提供的強大監控能力。在Spring Boot應用中,我們只需要簡單的引入spring-boot-starter-actuator
依賴就能為應用新增各種有用的監控端點。其中,/health
端點能夠全面檢查應用的健康狀態,該端點也被Spring Cloud中的服務治理(Eureka、Consul)用來檢查應用的健康狀態。所以,在使用Spring Cloud構建微服務架構的時候,如果還存在一些遺留的傳統Spring應用時,我們就需要為這些應用也加入/health
端點。那麼在傳統的Spring應用中我們是否也能引入該模組來提供這些有用的監控端點呢?下面我們就來介紹整合的詳細步驟:
第一步:引入相關依賴
由於在傳統Spring應用中,我們不能直接使用Starter POMs。所以,我們需要拆解了來引入到傳統Spring應用的pom.xml
中,主要有如下兩個依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-actuator</artifactId> <version>1.4.3.RELEASE</version> <type>jar</type> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>4.3.2.Final</version> </dependency>
第二部:手工引入配置
由於在傳統Spring應用中沒有自動化配置功能,所以我們需要手工的來建立配置並啟用Spring Boot Actuator的監控端點。比如,我們先來建立一個實現/health
端點的配置,具體如下:
@Configuration @Import({ EndpointAutoConfiguration.class, HealthIndicatorAutoConfiguration.class}) public class MyAppSpringConfig { @Bean public EndpointHandlerMapping endpointHandlerMapping( Collection<? extends MvcEndpoint> endpoints) { return new EndpointHandlerMapping(endpoints); } @Bean public HealthMvcEndpoint healthMvcEndpoint(HealthEndpoint delegate) { return new HealthMvcEndpoint(delegate, false); } }
其中,@Import
中引入的org.springframework.boot.actuate.autoconfigure.EndpointAutoConfiguration
類是Spring Boot Actuator的基礎配置類。org.springframework.boot.actuate.autoconfigure.HealthIndicatorAutoConfiguration
類是/health
端點的基礎配置,具體內容本文不做詳細展開,讀者可自行檢視。而在該配置類中,還建立了兩個Bean,其中EndpointHandlerMapping
是org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
的子類,它用來載入所有的監控端點;而HealthMvcEndpoint
是具體的/health
端點實現。
在完成上面配置之後,我們就可以啟動Spring應用,此時就可以看控制檯中看到打印出了/health
端點,我們可以嘗試訪問該端點來獲取當前例項的健康狀況。
除了在傳統應用中可以載入/health
端點之外,我們也可以如法炮製地建立其他端點,比如:獲取各個度量指標的/metrics
端點,可以通過如下配置實現:
@Configuration
@Import({ EndpointAutoConfiguration.class,
PublicMetricsAutoConfiguration.class,
HealthIndicatorAutoConfiguration.class})
public class MyAppSpringConfig {
@Bean
public EndpointHandlerMapping endpointHandlerMapping(
Collection<? extends MvcEndpoint> endpoints) {
return new EndpointHandlerMapping(endpoints);
}
@Bean
public HealthMvcEndpoint healthMvcEndpoint(HealthEndpoint delegate) {
return new HealthMvcEndpoint(delegate, false);
}
@Bean
public EndpointMvcAdapter metricsEndPoint(MetricsEndpoint delegate) {
return new EndpointMvcAdapter(delegate);
}
}
這裡,我們主要增加了兩個內容:
-
@Import
中增加引入PublicMetricsAutoConfiguration
配置類 - 建立
/metrics
端點的實現Bean
到這裡,本文的內容就介紹完了,更多關於傳統Spring應用與Spring Boot/Cloud的配合使用。敬請關注我的部落格和公眾號,獲取持續分享。