不学无数——SpringBoot入门Ⅷ

简介: SpringBoot--Actuator1. 初识Actuator在开发过程中,项目被放置到生产服务器上运行时,有可能需要我们全方位的监控应用服务的运行情况。

SpringBoot--Actuator

1. 初识Actuator

在开发过程中,项目被放置到生产服务器上运行时,有可能需要我们全方位的监控应用服务的运行情况。此时SpringBoot提供了Actuator模块进行监控和管理

2. 使用方法

在gradle中添加依赖

compile("org.springframework.boot:spring-boot-starter-actuator")

然后启动项目后会发现在启动中发现如下的输出信息

img_ab6f3391f8bd626d81c946cb2aa09bd0.png
image

这些端点信息是暴露在外面的原生信息,例如此时访问http://localhost:8080/health会发现在网站中输出如下信息

SpringBoot2.0中映射的地址是/actuator/health

{
    "status": "UP",
    "diskSpace": {
        "status": "UP",
        "total": 250685575168,
        "free": 172327690240,
        "threshold": 10485760
    },
    "db": {
        "status": "UP",
        "database": "MySQL",
        "hello": 1
    }
}

3. 端点介绍

Actuator的端点能够进行监控和管理应用。SpringBoot有许多的内嵌的端点,如果还需要其他的也可以自己添加。例如health端点提供了基本的应用健康信息。

每一个独立的端点都可以进行选择暴露或者不暴露,默认情况下有些端点是开启的,如果不想暴露的话,那么可以在配置文件中进行配置endpoints + . + name,举例如下:

endpoints.env.enabled=false

下面给出几个端点的简单介绍

端点名 描述 是否默认暴露
autoconfig 展示出所有自动配置的报告,展示自动配置的先决条件,并且分段展示出配置成功的和配置失败的,并且展示出原因,其中positiveMatches 是自动化配置成功的,negativeMatches 是自动化配置不成功的 true
beans 该端点用来获取应用上下文中创建的所有Bean true
configprops 展示出来所有@ConfigurationProperties的属性信息 true
dump 暴露出程序运行中的线程信息 true
env 它用来获取应用所有可用的环境属性报告。包括:环境变量、JVM属性、应用的配置配置、命令行中的参数 true
health 用来获取应用的各类健康指标信息 true
info 该端点用来返回一些应用自定义的信息。默认情况下,该端点只会返回一个空的json内容。我们可以在application.properties配置文件中通过info前缀来设置一些属性 true
metrics 该端点用来返回当前应用的各类重要度量指标,比如:内存信息、线程信息、垃圾回收信息等 true
mappings 展示出所有的@RequestMapping路径 true
trace 该端点用来返回基本的HTTP跟踪信息。默认情况下,跟踪信息的存储采用 true

3.1 自定义info端点信息

在添加了Actuator进行访问info端点的时候,我们会发现页面中显示了一个空的json信息。如果想要显示信息的话,那么可以在配置文件中通过设置info.*进行赋值,例如:

info.app.encoding=UTF-8
info.app.java.source=1.8
info.app.java.target=1.8

这是访问localhost:8080/info可以发现如下信息

{
    "app": {
        "java": {
            "target": "1.8",
            "source": "1.8"
        },
        "encoding": "UTF-8"
    },
    "name": "BuXueWuShu"
}

4. 自定义端点

有时候自带的端点信息不符合我们的需求,需要我们自定义一些端点信息。在自定义端点信息之前我们需要看一下Endpoint这个SpringBoot中的类。

public interface Endpoint<T> {
    //暴露在外的Id值,例如health、env
    String getId();
    
    //控制Id信息是否暴露
    boolean isEnabled();
    
    //用于权限的控制
    boolean isSensitive();
    
    //访问Id值返回的信息
    T invoke();
}

发现暴露出来的端点都是实现了Endpoint这个类,例如trace这个端点。

@ConfigurationProperties(prefix = "endpoints.trace")
public class TraceEndpoint extends AbstractEndpoint<List<Trace>> {

    private final TraceRepository repository;

    /**
     * Create a new {@link TraceEndpoint} instance.
     * @param repository the trace repository
     */
    public TraceEndpoint(TraceRepository repository) {
        super("trace");
        Assert.notNull(repository, "Repository must not be null");
        this.repository = repository;
    }

    @Override
    public List<Trace> invoke() {
        return this.repository.findAll();
    }

}

然后发现在spring.factories文件中自动配置了

org.springframework.boot.actuate.autoconfigure.EndpointAutoConfiguration,\

点进去以后发现在其中已经自动将默认的端点注入进Spring容器中了

    @Bean
    @ConditionalOnMissingBean -- 表示在容器中没有此实体Bean时创建
    public TraceEndpoint traceEndpoint() {
        return new TraceEndpoint(this.traceRepository == null
                ? new InMemoryTraceRepository() : this.traceRepository);
    }

因此自定义端点也是类似的原理,我们做个简单的如下:

public class MyEndPoint implements Endpoint {
    @Override
    public String getId() {
        return "buxuewushu";
    }

    @Override
    public boolean isEnabled() {
        return true;
    }

    @Override
    public boolean isSensitive() {
        return true;
    }

    @Override
    public Object invoke() {
        User user=new User();
        user.setName("不学无数");
        user.setAddress("HeNan");
        return user;
    }
}

将其放入spring.factories自动注入进容器中

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.FirstSpringBoot.EndPoint.MyEndPoint

然后启动项目输入localhost:8080/buxuewushu出现以下的信息

{
    "name": "不学无数",
    "address": "HeNan"
}

5. 参考文章

相关文章
|
3天前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
17 4
SpringBoot入门(4) - 添加内存数据库H2
|
2天前
|
Java 应用服务中间件 数据库连接
SpringBoot入门(2) - SpringBoot HelloWorld
SpringBoot入门(2) - SpringBoot HelloWorld
11 2
SpringBoot入门(2) - SpringBoot HelloWorld
|
5天前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
15 2
SpringBoot入门(4) - 添加内存数据库H2
|
5天前
|
前端开发 Java 数据库
SpringBoot入门(3) - 对Hello world进行MVC分层
SpringBoot入门(3) - 对Hello world进行MVC分层
18 1
SpringBoot入门(3) - 对Hello world进行MVC分层
|
5天前
|
Java 应用服务中间件 数据库连接
SpringBoot入门(2) - SpringBoot HelloWorld
SpringBoot入门(2) - SpringBoot HelloWorld
14 1
 SpringBoot入门(2) - SpringBoot HelloWorld
|
3天前
|
XML 安全 Java
SpringBoot入门(1) - SpringBoot简介
SpringBoot是在SpringFramework基础上发展起来的框架,旨在简化Spring应用的初始搭建及开发过程。它通过“约定优于配置”原则减少繁重的配置工作,提供开箱即用的特性,支持快速开发,同时自动配置Spring,提高开发效率。
28 11
|
3天前
|
前端开发 Java 数据库
SpringBoot入门(3) - 对Hello world进行MVC分层
本文介绍了如何在Spring Boot项目中实现MVC分层架构,通过将代码划分为controller、service、dao和entity四个部分,实现高内聚低耦合的设计。示例项目包括用户增删查改功能,详细展示了各层的具体实现及运行测试。
23 11
|
3天前
|
Java 应用服务中间件 数据库连接
SpringBoot入门(2) - SpringBoot HelloWorld
本文介绍了如何使用Spring Boot创建一个简单的Web应用程序,包括项目初始化、添加依赖、编写代码和运行程序等步骤。通过添加`spring-boot-starter-web`模块,快速搭建了一个能够响应HTTP请求的Web服务。此外,文章还探讨了如何配置服务器(如Tomcat)以及Spring Boot提供的其他常用starter模块。示例源码可在GitHub上获取。
23 11
|
2天前
|
XML 安全 Java
SpringBoot入门(1) - SpringBoot简介
SpringBoot入门(1) - SpringBoot简介
16 3
|
2天前
|
前端开发 Java 数据库
SpringBoot入门(3) - 对Hello world进行MVC分层
SpringBoot入门(3) - 对Hello world进行MVC分层
9 2