参考 在传统Spring应用中使用spring-boot-actuator模块提供监控端点
参考 springMVC中增加spring-boot-actuator
一、build.gradle
dependencies {
//compile 编译范围依赖在所有的 classpath 中可用,同时它们也会被打包
compile (
//自动依赖spring-boot、spring-boot-autoconfigure
"org.springframework.boot:spring-boot-actuator:$springBootVersion",
"org.hibernate:hibernate-validator:$hibernateVersion",
)
}
分析发现确实会自动依赖
二、MyWebMvcConfigurer.java
[MyWebMvcConfigurer.java]
/**
* @description: 自定义web配置类
*/
@Configuration
//开启自动配置
@EnableAutoConfiguration
//注释提供了一种方便的声明性机制,用于将PropertySource添加到Spring的Environment。需要与@Configuration类一起使用。
@PropertySource("classpath:/cfg.properties")
public class MyWebMvcConfigurer extends WebMvcConfigurerAdapter {
}
[ActuatorSpringConfig.java]
/**
* 若开启了{@link EnableAutoConfiguration},且jar中有actuator相关的AutoConfiguration类,就不需要手动配置了
*/
//@Configuration
public class ActuatorSpringConfig {
@Bean
public EndpointHandlerMapping endpointHandlerMapping(Collection<? extends MvcEndpoint> endpoints) {
return new EndpointHandlerMapping(endpoints);
}
@Bean
public HealthMvcEndpoint healthMvcEndpoint(HealthEndpoint delegate) {
return new HealthMvcEndpoint(delegate);
}
@Bean
public EndpointMvcAdapter metricsEndPoint(MetricsEndpoint delegate) {
return new EndpointMvcAdapter(delegate);
}
@Bean
public EndpointMvcAdapter infoEndPoint(InfoEndpoint delegate) {
return new EndpointMvcAdapter(delegate);
}
@Bean
public EndpointMvcAdapter traceEndPoint(TraceEndpoint delegate) {
return new EndpointMvcAdapter(delegate);
}
@Bean
public EndpointMvcAdapter dumpEndpoint() {
return new EndpointMvcAdapter(new DumpEndpoint());
}
@Bean
public EndpointMvcAdapter environmentEndpoint(StandardServletEnvironment environment) {
EnvironmentEndpoint environmentEndpoint = new EnvironmentEndpoint();
environmentEndpoint.setEnvironment(environment);
return new EndpointMvcAdapter(environmentEndpoint);
}
@Bean
public EndpointMvcAdapter beansEndpoint(ApplicationContext context) {
BeansEndpoint endpoint = new BeansEndpoint();
endpoint.setApplicationContext(context);
return new EndpointMvcAdapter(endpoint);
}
@Bean
public EndpointMvcAdapter requestMappingEndpoint(ApplicationContext context) {
RequestMappingEndpoint requestMappingEndpoint = new RequestMappingEndpoint();
requestMappingEndpoint.setApplicationContext(context);
return new EndpointMvcAdapter(requestMappingEndpoint);
}
@Bean
public EndpointMvcAdapter shutdownEndpoint(ApplicationContext context) {
ShutdownEndpoint shutdownEndpoint = new ShutdownEndpoint();
shutdownEndpoint.setApplicationContext(context);
shutdownEndpoint.setEnabled(true);
return new EndpointMvcAdapter(shutdownEndpoint);
}
}
三、spring.xml
<context:component-scan base-package="com.hd" >
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" />
<context:exclude-filter type="annotation" expression="springfox.documentation.swagger2.annotations.EnableSwagger2"/>
<context:exclude-filter type="annotation" expression="org.springframework.boot.autoconfigure.EnableAutoConfiguration"/>
</context:component-scan>
四、mvc.xml
<context:component-scan base-package="com.hd" use-default-filters="false">
<!-- base-package 如果多个,用“,”分隔 -->
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" />
<context:include-filter type="annotation" expression="springfox.documentation.swagger2.annotations.EnableSwagger2"/>
<context:include-filter type="annotation" expression="org.springframework.boot.autoconfigure.EnableAutoConfiguration"/>
</context:component-scan>
传统Spring项目存在父子容器,本案例是把自动配置功能放在mvc容器中。
五、启动
[RMI TCP Connection(3)-127.0.0.1 2021-02-27 23:44:42.867] [INFO ] AbstractHandlerMethodMapping.registerHandlerMethod:220 Mapped "{[/health],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint.invoke(java.security.Principal)
[RMI TCP Connection(3)-127.0.0.1 2021-02-27 23:44:42.868] [INFO ] AbstractHandlerMethodMapping.registerHandlerMethod:220 Mapped "{[/shutdown],methods=[POST],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.ShutdownMvcEndpoint.invoke()
[RMI TCP Connection(3)-127.0.0.1 2021-02-27 23:44:42.869] [INFO ] AbstractHandlerMethodMapping.registerHandlerMethod:220 Mapped "{[/mappings],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
[RMI TCP Connection(3)-127.0.0.1 2021-02-27 23:44:42.869] [INFO ] AbstractHandlerMethodMapping.registerHandlerMethod:220 Mapped "{[/info],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
[RMI TCP Connection(3)-127.0.0.1 2021-02-27 23:44:42.870] [INFO ] AbstractHandlerMethodMapping.registerHandlerMethod:220 Mapped "{[/metrics/{name:.*}],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.MetricsMvcEndpoint.value(java.lang.String)
[RMI TCP Connection(3)-127.0.0.1 2021-02-27 23:44:42.870] [INFO ] AbstractHandlerMethodMapping.registerHandlerMethod:220 Mapped "{[/metrics],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
[RMI TCP Connection(3)-127.0.0.1 2021-02-27 23:44:42.870] [INFO ] AbstractHandlerMethodMapping.registerHandlerMethod:220 Mapped "{[/beans],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
[RMI TCP Connection(3)-127.0.0.1 2021-02-27 23:44:42.871] [INFO ] AbstractHandlerMethodMapping.registerHandlerMethod:220 Mapped "{[/autoconfig],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
[RMI TCP Connection(3)-127.0.0.1 2021-02-27 23:44:42.871] [INFO ] AbstractHandlerMethodMapping.registerHandlerMethod:220 Mapped "{[/dump],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
[RMI TCP Connection(3)-127.0.0.1 2021-02-27 23:44:42.871] [INFO ] AbstractHandlerMethodMapping.registerHandlerMethod:220 Mapped "{[/trace],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
[RMI TCP Connection(3)-127.0.0.1 2021-02-27 23:44:42.872] [INFO ] AbstractHandlerMethodMapping.registerHandlerMethod:220 Mapped "{[/configprops],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
[RMI TCP Connection(3)-127.0.0.1 2021-02-27 23:44:42.872] [INFO ] AbstractHandlerMethodMapping.registerHandlerMethod:220 Mapped "{[/env/{name:.*}],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EnvironmentMvcEndpoint.value(java.lang.String)
[RMI TCP Connection(3)-127.0.0.1 2021-02-27 23:44:42.873] [INFO ] AbstractHandlerMethodMapping.registerHandlerMethod:220 Mapped "{[/env],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
通过swagger-ui也能看到各种监控端点的访问路径:
六、使用配置文件
因为在 MyWebMvcConfigurer
类中使用 @PropertySource
指定了配置文件为cfg.properties,所以可以通过该配置文件对actuator进行一些设置。
# 关闭所有endpoint
endpoints.enabled=false
# 关闭指定的endpoint
endpoints.trace.enabled=false
#关闭数据库健康检查
management.health.db.enabled=false