之前的文章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返回
/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的结合
网友评论