程序员Spring Boot首页推荐

SpringBoot基础教程(十)——与actuator的结合

2018-03-24  本文已影响146人  数齐

之前的文章SpringBoot基础教程(七)——与remote shell的结合中我们有讲到项目的监控。但是spring boot拥有自己的监控系统运行的体系,就是Actuator模块。它可以实现对应用系统进行配置查看、相关功能统计等。它是通过一个个endpoint(端点)来实现的。今天我们来说2点,第一是关闭系统自带的endpoint,第二点是实现一个自己的endpoint。
老规矩,看下pom

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</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-actuator</artifactId>
        </dependency>

spring-boot-starter-actuator包含了端点功能所需要的jar。我们什么不用做,启动项目。输入
http://localhost:8080/health 看到页面上有Json返回

image.png
/health说的是当前系统的一个健康状况,我们什么都没有做,也没有定义/health这个路径要处理的逻辑(没有RequestMapping),说明这是框架自带的功能,是框架帮我们实现好的。所以像这些自带的功能有
image.png
我们都可以利用。当然我们可以看到主要是get请求,但是也有POST请求的/shutdown,这个操作是在运行时让我们的系统关闭的,比较危险,所以不能使用GET这种很容易模拟的,说不定哪天因为误操作点到了,就会造成不可避免的损失,所以使用POST,因为POST的请求是需要特殊构建的。如果我们不希望这样的请求暴露出去怎么办,我们可以在配置文件中让他关闭endpoints.shutdown.enabled: false,这样这个功能就不会被暴露出去。
下面我们想实现一个自己的endpoint。其实也比较简单,看代码吧
package com.shuqi.endpoint;

import org.springframework.boot.actuate.endpoint.AbstractEndpoint;
import org.springframework.stereotype.Component;

import java.util.concurrent.atomic.AtomicLong;

@Component
public class LongEndpoint extends AbstractEndpoint<Long> {

    private AtomicLong count = new AtomicLong();

    public LongEndpoint() {
        super("long");
    }

    @Override
    public Long invoke() {
        return count.getAndIncrement();
    }
}


继承AbstractEndpoint这个类,我们的逻辑在invoke中写就可以了。示例中实现的功能,是每次请求返回值+1。这个endpoint的名称就是“long”。看下具体的效果


image.png

再请求一次


image.png
和我们预想的结果是一致的。大家可以发动自己的想象力,看看他能给我们的系统带来什么方便的改造了。

下节将的内容是:SpringBoot基础教程(十一)——与自定义Runner的结合

本节项目源码

参考文档:

使用Spring Boot Actuator监控应用

上一篇下一篇

猜你喜欢

热点阅读