在POM文件中添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
<version>1.4.3.RELEASE</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9</version>
</dependency>
通过Spring的XML文件或者注解方式配置ActuatorConfig的Bean
package com.datahan.webapp.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.autoconfigure.EndpointAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.HealthIndicatorAutoConfiguration;
import org.springframework.boot.actuate.endpoint.BeansEndpoint;
import org.springframework.boot.actuate.endpoint.HealthEndpoint;
import org.springframework.boot.actuate.endpoint.InfoEndpoint;
import org.springframework.boot.actuate.endpoint.RequestMappingEndpoint;
import org.springframework.boot.actuate.endpoint.mvc.EndpointHandlerMapping;
import org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter;
import org.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint;
import org.springframework.boot.actuate.endpoint.mvc.MvcEndpoint;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import java.util.Collection;
@Configuration
@Import({EndpointAutoConfiguration.class,
HealthIndicatorAutoConfiguration.class})
public class ActuatorConfig {
@Bean
@Autowired
public EndpointHandlerMapping endpointHandlerMapping(
Collection<? extends MvcEndpoint> endpoints
) {
return new EndpointHandlerMapping(endpoints);
}
@Bean
@Autowired
public HealthMvcEndpoint healthMvcEndpoint(HealthEndpoint delegate) {
return new HealthMvcEndpoint(delegate, false);
}
@Bean
@Autowired
public EndpointMvcAdapter infoMvcEndPoint(InfoEndpoint delegate) {
return new EndpointMvcAdapter(delegate);
}
@Bean
@Autowired
public EndpointMvcAdapter beansEndPoint(BeansEndpoint delegate) {
return new EndpointMvcAdapter(delegate);
}
@Bean
@Autowired
public EndpointMvcAdapter requestMappingEndPoint(RequestMappingEndpoint delegate) {
return new EndpointMvcAdapter(delegate);
}
}
让这个ActuatorConfig配置类能够被Spring容器加载
如果是用XML文件配置的,把这个类定义在<Bean>标签内
如果是用注解配置的,应该开启自动包扫描
<context:component-scan base-package="扫描的包名"/>
<context:annotation-config/>
输入/health后的效果
写在最后
使用spring-boot-actuator 2.x以上的版本,需要考虑几点区别:
- 由于spring boot 2.x出现的WebFlux基于Reactive开发,和Spring MVC这种基于Servlet开发共存的模式,你在spring-boot-actuator 1.x上使用的EndpointHandlerMapping,被分为了两种,需要使用WebMvcEndpointHandlerMapping来指明是以Servlet来映射地址的。
- 2.x的版本对安全性的考虑更多,配置也更多,Actuator的所有HTTP Endpoints前要加上/actuator, 例如/actuator/health,同时还必须配置其可见性ShowDetails为Always,在spring boot的自动配置里,它可是被配置成Never的,这会导致你明显已经在应用中启用了数据库连接池,缓存和消息队列,你却看不到它们健康状态的原因。
- 除了HTTP Endpoints监控应用本身之外,还可以通过JMX来获取虚拟机更多的信息。它可以方便的管理、监控正在运行中的Java程序,常用于管理线程,内存,日志,服务重启,系统环境等,由于JMX的MBean获取使用RMI协议,对于开发监控项目有阻碍,可以考虑采用Jolokia配合Actuator来完善监控的方方面面。