监控Spring Boot应用 在Spring Boot应用中,既然通过HTTP使用Actuator的监控和管理功能,那么在pom.xml文件中,除了引入spring-boot-starter-web之外,还需要引入spring-boot-starter-actuator,具体代码如下: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
Spring Boot提供了许多监控和管理功能的端点。根据端点的作用,可以将Spring Boot提供的原生端点分为三大类:应用配置端点、度量指标端点和操作控制端点。
端点的开启与暴露 通过实例查看Spring Boot默认暴露的端点。 查看Spring Boot默认暴露的端点。 1.创建基于Spring Boot Actuator的Web应用ch10_1 2.配置JSON输出格式 3.启动主程序查看默认暴露的端点
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.actuator</groupId> <artifactId>SpringBootActuator</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <properties> <!-- 声明项目配置依赖编码格式为 utf-8 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <fastjson.version>1.2.24</fastjson.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
#输出的JSON字符串格式更美观 spring.jackson.serialization.indent-output=true management.endpoint.shutdown.enabled=true management.endpoints.web.exposure.include=* #management.endpoints.web.exposure.exclude=env,beans info.app.name=spring-boot-hello info.app.version=v1.0.0 #将详细健康信息显示给所有用户 management.endpoint.health.show-details=always
package com.ch.ch10_1; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Ch101Application { public static void main(String[] args) { SpringApplication.run(Ch101Application.class, args); } }
package com.ch.ch10_1; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest public class Ch101ApplicationTests { @Test public void contextLoads() { } }
启动Web应用ch10_1的主程序Ch101Application后,通过访问“http://localhost:8080/actuator”查看默认暴露的端点,运行效果如图
Spring Boot默认暴露了health和info两个端点。如果想暴露Spring Boot提供的所有端点,需要在配置文件application.properties配置“management.endpoints.web.exposure.include=*”,配置后重启应用主程序,重新访问“http://localhost:8080/actuator”就可以查看所有暴露的端点
默认情况下,除了shutdown端点是关闭的,其它端点都是开启的。配置一个端点的开启,使用management.endpoint..enabled属性,如启用shutdown端点: management.endpoint.shutdown.enabled=true 我们在配置文件中可使用“management.endpoints.web.exposure.include”属性列出暴露的端点,示例如下: management.endpoints.web.exposure.include=info,health,env,beans “*”可用来表示所有的端点,例如,除了env和beans端点,通过HTTP暴露所有端点,示例如下: management.endpoints.web.exposure.include=* management.endpoints.web.exposure.exclude=env,beans
应用配置端点的测试 通过应用配置端点就可以帮助我们轻松的获取一系列关于Spring应用配置内容的详细报告,比如:自动化配置的报告、Bean创建的报告、环境属性的报告等。 1.conditions 2.beans 3.configprops 4.env 5.mappings 6.info
1.conditions 该端点在1.x版本中名为autoconfig,该端点用来获取应用的自动化配置报告,其中包括所有自动化配置的候选项。同时还列出了每个候选项自动化配置的各个先决条件是否满足。所以,该端点可以帮助我们方便的找到一些自动化配置为什么没有生效的具体原因。该报告内容将自动化配置内容分为三部分:positiveMatches中返回的是条件匹配成功的自动化配置;negativeMatches中返回的是条件匹配不成功的自动化配置;unconditionalClasses无条件配置类。启动并暴露该端点后,可通过“http://localhost:8080/actuator/conditions”测试访问。
2.beans 该端点用来获取应用上下文中创建的所有Bean,启动并暴露该端点后,可通过“http://localhost:8080/actuator/beans”测试访问
3.configprops 该端点用来获取应用中配置的属性信息报告,prefix属性代表了属性的配置前缀,properties代表了各个属性的名称和值,例如可以设置spring.http.encoding.charset="UTF-8"。启动并暴露该端点后,可通过“http://localhost:8080/actuator/configprops”测试访问
4.env 该端点与configprops端点不同,它用来获取应用所有可用的环境属性报告。包括:环境变量、JVM属性、应用的配置、命令行中的参数等内容。启动并暴露该端点后,可通过“http://localhost:8080/actuator/env”测试访问
5.mappings 该端点用来返回所有Spring MVC的控制器映射关系报告。启动并暴露该端点后,可通过“http://localhost:8080/actuator/mappings”测试访问
6.info 该端点用来返回一些应用自定义的信息。默认情况下,该端点只会返回一个空的json内容。我们可以在application.properties配置文件中通过info前缀来设置一些属性。比如: info.app.name=spring-boot-hello info.app.version=v1.0.0 启动并暴露该端点后,可通过“http://localhost:8080/actuator/info”