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主鱼松