目录

  • 1 初识Java EE
    • 1.1 新建目录
    • 1.2 新建目录
  • 2 Spring Boot知识回顾
    • 2.1 学习目标
    • 2.2 ​Spring Boot简介
      • 2.2.1 Eclipse中Spring Boot开发环境安装
      • 2.2.2 Eclipse中手工构建Spring Boot项目(一)
      • 2.2.3 Eclipse中手工构建Spring Boot项目(二)
      • 2.2.4 Spring Tool Suite中构建Spring boot项目
      • 2.2.5 Spring Boot的开发步骤
  • 3 Spring Boot核心配置
    • 3.1 学习目标
    • 3.2 Spring Boot核心配置
    • 3.3 基本配置
    • 3.4 日志配置
    • 3.5 读取应用配置
  • 4 Spring Boot的Web开发
    • 4.1 学习目标
    • 4.2 Spring Boot的Web开发支持
    • 4.3 Thymeleaf模板引擎
      • 4.3.1 Spring Boot与Thymeleaf实现页面信息国际化
      • 4.3.2 Spring Boot与Thymeleaf的表单验证
    • 4.4 Spring Boot处理JSON数据
    • 4.5 Spring Boot文件上传与下载
    • 4.6 Spring Boot的异常统一处理
    • 4.7 Spring Boot对JSP的支持
    • 4.8 Spring Boot与MyBatis的集成
    • 4.9 Spring Boot与MyBatis整合(项目重构)
  • 5 Spring Boot的数据访问
    • 5.1 学习目标
    • 5.2 REST
      • 5.2.1 REST 简介
      • 5.2.2 Spring Boot整合REST
      • 5.2.3 Spring Data REST
    • 5.3 Spring Data JPA
      • 5.3.1 简单条件查询-案例专家抽取系统
      • 5.3.2 关联查询 (一对一)
      • 5.3.3 关联查询 (一对多)
      • 5.3.4 关联查询 (多对多)
      • 5.3.5 @Query和@Modifying注解
      • 5.3.6 排序与分页查询
    • 5.4 Spring Boot使用JdbcTemplate
    • 5.5 Spring Boot的事务管理
    • 5.6 MongoDB
    • 5.7 Redis
      • 5.7.1 安装Redis
      • 5.7.2 SpringBoot整合Redis
      • 5.7.3 使用StringRedisTemplate和RedisTemplate
    • 5.8 数据缓存Cache
      • 5.8.1 Spring Boot缓存支持
      • 5.8.2 Redis Cache运行测试
      • 5.8.3 ehCache
  • 6 Spring Boot的安全控制
    • 6.1 学习目标
    • 6.2 Spring Security快速入门
    • 6.3 基于Spring Data JPA的Spring Boot Security操作实例
    • 6.4 基于MyBatis的Spring Boot Security操作实例
  • 7 异步消息
    • 7.1 学习目标
    • 7.2 消息模型
    • 7.3 JMS消息代理
    • 7.4 AMQP消息代理
  • 8 Spring Boot的热部署与单元测试
    • 8.1 学习目标
    • 8.2 开发的热部署
      • 8.2.1 模板引擎的热部署
      • 8.2.2 使用spring-boot-devtools进行热部署
    • 8.3 Spring Boot的单元测试
  • 9 监控Spring Boot应用
    • 9.1 学习目标
    • 9.2 端点的分类与测试
    • 9.3 自定义端点
    • 9.4 自定义HealthIndicator
  • 10 电子商务平台开发
    • 10.1 学习目标
    • 10.2 系统设计与实现
    • 10.3 后台管理子系统
    • 10.4 前端页面子系统
端点的分类与测试

    端点的分类与测试

在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默认暴露的端点。

【例10-1】查看Spring Boot默认暴露的端点。

1.创建基于Spring Boot Actuator的Web应用ch10_1

2.配置JSON输出格式

3.启动主程序查看默认暴露的端点

二、应用配置端点的测试

通过应用配置端点就可以帮助我们轻松的获取一系列关于Spring应用配置内容的详细报告,比如:自动化配置的报告、Bean创建的报告、环境属性的报告等。

1.conditions

该端点在1.x版本中名为autoconfig,该端点用来获取应用的自动化配置报告,其中包括所有自动化配置的候选项。同时还列出了每个候选项自动化配置的各个先决条件是否满足。所以,该端点可以帮助我们方便的找到一些自动化配置为什么没有生效的具体原因。该报告内容将自动化配置内容分为三部分:positiveMatches中返回的是条件匹配成功的自动化配置;negativeMatches中返回的是条件匹配不成功的自动化配置;unconditionalClasses无条件配置类。启动并暴露该端点后,可通过http://localhost:8080/actuator/conditions   测试访问。

2.beans

    该端点用来获取应用上下文中创建的所有Bean,启动并暴露该端点后,可通过“http://localhost:8080/actuator/beans”测试访问,测试效果如图10.5所示。


3.configprops

    该端点用来获取应用中配置的属性信息报告,prefix属性代表了属性的配置前缀,properties代表了各个属性的名称和值,例如可以设置spring.http.encoding.charset="UTF-8"。启动并暴露该端点后,可通过“http://localhost:8080/actuator/configprops”测试访问,测试效果如图10.6所示。

4.env

    该端点与configprops端点不同,它用来获取应用所有可用的环境属性报告。包括:环境变量、JVM属性、应用的配置、命令行中的参数等内容。启动并暴露该端点后,可通过“http://localhost:8080/actuator/env”测试访问,测试效果如图10.7所示。

5.mappings

   该端点用来返回所有Spring MVC的控制器映射关系报告。启动并暴露该端点后,可通过“http://localhost:8080/actuator/mappings”测试访问,测试效果如图10.8所示。

6.info

该端点用来返回一些应用自定义的信息。默认情况下,该端点只会返回一个空的json内容。我们可以在application.properties配置文件中通过info前缀来设置一些属性。比如:

info.app.name=spring-boot-hello

info.app.version=v1.0.0

启动并暴露该端点后,可通过“http://localhost:8080/actuator/info”测试访问,测试效果如图10.9所示。

三、 度量指标端点的测试

    通过度量指标端点可获取应用程序运行过程中用于监控的度量指标,比如:内存信息、线程信息、HTTP请求统计等。

1.metrics


该端点用来返回当前应用的各类重要度量指标,比如:内存信息、线程信息、垃圾回收信息等。启动并暴露该端点后,可通过“http://localhost:8080/actuator/metrics”测试访问,测试效果如图10.10所示。

metrics端点可以提供应用运行状态的完整度量指标报告,这项功能非常的实用,但是对于监控系统中的各项监控功能,它们的监控内容、数据收集频率都有所不同,如果我们每次都通过全量获取报告的方式来收集,略显粗暴。所以,我们还可以通过/metrics/{name}接口来更细粒度的获取度量信息,比如我们可以通过访问/metrics/jvm.memory.used来获取当前JVM使用的内存数量,如图10.11所示。


2.health


该端点用来获取应用的各类健康指标信息。在spring-boot-starter-actuator模块中自带实现了一些常用资源的健康指标检测器。这些检测器都是通过HealthIndicator接口实现,并且根据依赖关系的引入实现自动化装配,比如用于检测磁盘的DiskSpaceHealthIndicator、检测DataSource连接是否可用的DataSourceHealthIndicator等。


启动并暴露该端点后,可通过“http://localhost:8080/actuator/health”测试访问,测试效果如图10.12所示。

    从图10.12可以看出健康指标信息没有显示细节,我们可以在配置文件中,配置属性management.endpoint.health.show-details=always,将详细健康信息显示给所有用户。再次启动应用后,刷新http://localhost:8080/actuator/health,显示健康指标详细信息,如图10.13所示。

3.threaddump


    该端点用来暴露程序运行中的线程信息。它使用java.lang.management.ThreadMXBean的dumpAllThreads方法来返回所有含有同步信息的活动线程详情。启动并暴露该端点后,可通过“http://localhost:8080/actuator/threaddump”测试访问,测试效果如图10.14所示。



4.httptrace


    该端点用来返回基本的HTTP跟踪信息。默认情况下,跟踪信息的存储采用org.springframework.boot.actuate.trace.InMemoryTraceRepository实现的内存方式,始终保留最近的100条请求记录。启动并暴露该端点后,可通过“http://localhost:8080/actuator/httptrace”测试访问,测试效果如图10.15所示。


5.scheduledtasks


    该端点统计应用程序中调度的任务。启动并暴露该端点后,可通过“http://localhost:8080/actuator/scheduledtasks”测试访问,测试效果如图10.16所示。


四、操作控制端点的测试

操作控制类端点拥有更强大的控制能力,如果使用它们,需要通过属性来配置开启。在原生端点中,只提供了一个用来关闭应用的端点:shutdown。我们可以通过如下配置开启它:management.endpoint.shutdown.enabled=true,在配置了上述属性之后,只需要访问该应用的shutdown端点就能实现关闭该应用的远程操作。由于开放关闭应用的操作本身是一件非常危险的事,所以真正在线上使用的时候,需要对其加入一定的保护机制,比如:定制Actuator的端点路径、整合Spring Security进行安全校验等。

    shutdown端点不支持get提交,不可以直接在浏览器上访问,所以我们这里可以使用rest-client-master来测试。用post方式访问“http://localhost:8080/actuator/shutdown”,测试效果如图10.17所示。