第一步:引入相關(guān)依賴
由于在傳統(tǒng)Spring應(yīng)用中,我們不能直接使用Starter POMs。所以,我們需要拆解了來(lái)引入到傳統(tǒng)Spring應(yīng)用的pom.xml
中,主要有如下兩個(gè)依賴:
<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>
#第二部:手工引入配置
由于在傳統(tǒng)Spring應(yīng)用中沒(méi)有自動(dòng)化配置功能,所以我們需要手工的來(lái)創(chuàng)建配置并啟用Spring Boot Actuator的監(jiān)控端點(diǎn)。比如,我們先來(lái)創(chuàng)建一個(gè)實(shí)現(xiàn)/health
端點(diǎn)的配置,具體如下:
@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的基礎(chǔ)配置類。org.springframework.boot.actuate.autoconfigure.HealthIndicatorAutoConfiguration
類是/health
端點(diǎn)的基礎(chǔ)配置,具體內(nèi)容本文不做詳細(xì)展開(kāi),讀者可自行查看。而在該配置類中,還創(chuàng)建了兩個(gè)Bean,其中EndpointHandlerMapping
是org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
的子類,它用來(lái)加載所有的監(jiān)控端點(diǎn);而HealthMvcEndpoint
是具體的/health
端點(diǎn)實(shí)現(xiàn)。
在完成上面配置之后,我們就可以啟動(dòng)Spring應(yīng)用,此時(shí)就可以看控制臺(tái)中看到打印出了/health
端點(diǎn),我們可以嘗試訪問(wèn)該端點(diǎn)來(lái)獲取當(dāng)前實(shí)例的健康狀況。
除了在傳統(tǒng)應(yīng)用中可以加載/health
端點(diǎn)之外,我們也可以如法炮制地創(chuàng)建其他端點(diǎn),比如:獲取各個(gè)度量指標(biāo)的/metrics
端點(diǎn),可以通過(guò)如下配置實(shí)現(xiàn):
@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);
}
}
這里,我們主要增加了兩個(gè)內(nèi)容:
@Import
中增加引入PublicMetricsAutoConfiguration
配置類- 創(chuàng)建
/metrics
端點(diǎn)的實(shí)現(xiàn)Bean