Menu Close

在IDEA中使用 Gradle 构建 Java Spring Boot项目(例五)

环境描述

描述项 内容
操作系统 CentOS Linux release 7.8.2003 (Core)
java版本 java version "1.8.0_161"
IDEA版本 2022.2.2
Gradle版本 7.5 (使用了 kotlin 语言)
上接文章 在IDEA中使用 Gradle 构建 Java 项目(例三)
下接文章 使用 Gradle 整合 Spring Data JPA(例六)

1. 在项目中添加 Spring Boot

1.1. 增补 Spring Boot 依赖

到 maven中央仓库 中找到Spring Boot坐标,然后将其填充到 build.gradle.kts 文件中。最后刷新Gradle,Gradle就会将所有Spring Boot的依赖包从 maven 仓库中拉取到本地。

dependencies {
implementation("org.springframework.boot:spring-boot-starter:2.7.3")
implementation("org.springframework.boot:spring-boot-starter-web:2.7.3")
implementation("org.springframework.boot:spring-boot-starter-test:2.7.3")
}

file

1.2. 更新项目的启动文件

修改 QuestionServiceBootstrap 文件,内容如下

详细内容

package xin.qishuo.question;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class QuestionServiceBootstrap {
    public static void main(String[] args) {
        SpringApplication.run(QuestionServiceBootstrap.class,args);
    }
}

这里需要增加 @SpringBootApplication 注解、SpringApplication.run方法等。

1.3. 运行 main 方法

file

因为除了引入 spring-boot-starter 之外,还引入了 spring-boot-starter-web,这样 Spring 会默认在 8080 端口上去启动一个 Tomcat 服务,并且监听该端口,相当于Spring 容器已经启动了。

1.4 让 Spring Boot作为服务来运行

file

2. 集成 Actuator [ˈæktʃʊˌeɪtə]

2.1. 什么是 Actuator

生产系统中,往往需要对系统实际运行的情况(例如cpu、io、disk、db、业务功能等指标)进行监控运维。在SpringBoot项目中Actuator模块提供了众多HTTP接口端点(Endpoint),来提供应用程序运行时的内部状态信息。

Actuator模块提供了一个监控和管理生产环境的模块,可以使用http、jmx、ssh、telnet等来管理和监控应用。包括应用的审计(Auditing)、健康(health)状态信息、数据采集(metrics gathering)统计等监控运维的功能。同时,提供了可以扩展 Actuator端点(Endpoint)自定义监控指标。这些指标都是以JSON接口数据的方式呈现。

2.2. 增补 Spring Boot Actuator 的依赖

使用Spring Boot Actuator需要加入如下依赖:

dependencies {
implementation("org.springframework.boot:spring-boot-starter-actuator:2.7.3")
}

引入Actuator依赖后,SpringBoot 在运行时会自动开启 /actuator/health 和 /actuator/info 这两个 endpoint,我们就可以通过这两个 endpoint 来查看当前 SpringBoot 运行的情况。

需要注意:因为 SpringBoot Actuator 会暴露服务的详细信息,为了保障安全性,建议添加安全控制的相关依赖 spring-boot-starter-security ,这样在访问应用监控端点时,都需要输入验证信息。

2.3. Endpoints 介绍

Spring Boot 提供了所谓的 endpoints (下文翻译为:端点)给外部来与应用程序进行访问和交互。

打比方来说,/health 端点 提供了关于应用健康情况的一些基础信息。metrics 端点 提供了一些有用的应用程序指标(JVM 内存使用、系统CPU使用等)。

这些 Actuator 模块本来就有的端点我们称之为原生端点。根据端点的作用的话,我们大概可以分为三大类:

  • 应用配置类:获取应用程序中加载的应用配置、环境变量、自动化配置报告等与Spring Boot应用密切相关的配置类信息。

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

  • 操作控制类:提供了对应用的关闭等操作类功能。

需要注意的就是:

  • 每一个端点都可以通过配置来单独禁用或者启动

  • 不同于Actuator 1.x,Actuator 2.x 的大多数端点默认被禁掉。 Actuator 2.x 中的默认端点增加了/actuator前缀 。默认暴露的两个端点为 /actuator/health 和 /actuator/info

详细的介绍请参阅 官方网站 的说明。

2.4. health 端点

重新启动 QuestionServiceBootstrap,在浏览器中访问 http://127.0.0.1:8080/actuator/health 。

file

2.5. 编写测试类验证 health 端点

SmokeTest类的详细内容

package xin.qishuo.question;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;

@SpringBootTest
@AutoConfigureMockMvc
public class SmokeTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    void verifyActuator() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.get("/actuator/health"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.jsonPath("$.status").value("UP"));
    }
}

在Spring中,我们要在测试里面启动整个 Spring应用,就要先声明@SpringBootTest 注解,然后它会把整个 Spring 的上下文启动起来。其次,引入了 MockMvc 的对象来进行测试,MockMvc 是 Spring 提供的一个工具类,它可以在测试代码中创建一个请求,并且断言这个请求的结果 。MockMvc 需要通过 @Autowired 在运行期注入进来,如果希望注入这个 Bean 的话,我们还需要声明一个允许自动配置 MockMvc 的@AutoConfigureMockMvc 注解。这时就可以在测试中去调用 MockMvc 来帮助我们进行接口测试了。

2.6. 运行测试来验证health 端点的结果

file

附录

附录A. 相关联的文章

附录B. 参考

  • B站up主鱼松