本文基于spring boot 2.2.0 release版本。

在上一篇文章《spring boot Actuator原理详解之启动》详细介绍了在web环境下,Actuator是如何启动的,这里对流程做一个简单的总结:

  1. 扫描所有@Endpoint注解的类,这些类都是Endpoint;
  2. 使用过滤器对Endpoint对象进行过滤,没有被过滤掉的才可以进入下一步;
  3. 读取Endpoint对象的每个方法,判断是否有@ReadOperation、@WriteOperation、@DeleteOperation三个注解,如果有,则针对每个被注解的方法创建操作对象Operation;
  4. 根据操作对象、Endpoint对象、Endpoint名创建为RequestMappingInfo,并将其注册到spring mvc中;
  5. 注册成功之后,Endpoint对象便可以对外提供服务。

明白了上面整个启动流程之后,我们也可以编写一个自定义的Endpoint。
自定义Endpoint的关键点:

  1. 类上必须有注解@Endpoint,注解必须设置id值,否则启动抛出如下异常:Caused by: java.lang.IllegalStateException: No @Endpoint id attribute specified for XXXClass
  2. 必须指定方法注解为下面三个中一个:@ReadOperation、@WriteOperation、@DeleteOperation
  3. 注解@Selector可以指定路径参数,比如/actuator/caches/{cache}花括号里面的内容是路径参数,我们可以在方法入参上添加@Selector来指定路径参数,比如public String counters(@Selector int value)
  4. 默认Endpoint对象的方法都是以json格式返回客户端,可以通过设置@ReadOperation、@WriteOperation、@DeleteOperation的produces属性指定其他格式。

下面给出一个自定义Endpoint的例子:

/*** 统计方法该Endpoint对象的次数*/
@Component
@Endpoint(id="counter")
public class Counter  {private AtomicInteger cnt=new AtomicInteger(0);@ReadOperationpublic int counter() {return cnt.getAndAdd(1);}@ReadOperationpublic int counters(@Selector int value) {return cnt.getAndAdd(value);}
}

上面这个类只是一个示例,并没有实际意义。运行起来后,访问http://localhost:8079/actuator/counter,每次访问都会返回一个比之前大1的数字。

我们还可以使用注解@EndpointWebExtension扩展已有的Endpoint。
下面是spring提供的对EnvironmentEndpoint的扩展:

@EndpointWebExtension(endpoint = EnvironmentEndpoint.class)
public class EnvironmentEndpointWebExtension {private final EnvironmentEndpoint delegate;public EnvironmentEndpointWebExtension(EnvironmentEndpoint delegate) {this.delegate = delegate;}@ReadOperationpublic WebEndpointResponse<EnvironmentEntryDescriptor> environmentEntry(@Selector String toMatch) {EnvironmentEntryDescriptor descriptor = this.delegate.environmentEntry(toMatch);return new WebEndpointResponse<>(descriptor, getStatus(descriptor));}private int getStatus(EnvironmentEntryDescriptor descriptor) {if (descriptor.getProperty() == null) {return WebEndpointResponse.STATUS_NOT_FOUND;}return WebEndpointResponse.STATUS_OK;}
}

就web环境下来说,如果扩展类的方法有与原类相同的http请求路径,那么扩展类会替换掉原来的方法,也就是说,访问该路径时,不会访问到原类的方法,而是访问到扩展类。

spring boot Actuator之自定义Endpoint相关推荐

  1. Spring Boot Actuator:自定义端点,其顶部具有MVC层

    Spring Boot Actuator端点允许您监视应用程序并与之交互. Spring Boot包含许多内置端点,您也可以添加自己的端点. 添加自定义端点就像创建一个从org.springframe ...

  2. 警惕 Spring Boot Actuator 引发的安全问题

    前言 一年一度的 HW 行动开始了,最近也是被各种安全漏洞搞的特别闹心,一周能收到几十封安全团队扫描出来的漏洞邮件,这其中有一类漏洞很容易被人忽视,但影响面却极广,危害也极大,我说出它的名字你应该也不 ...

  3. SpringBoot2.x系列教程(七十)Spring Boot Actuator集成及自定义Endpoint详解

    前言 曾经看到Spring Boot Actuator这个框架时,一直在想,它到底有什么作用呢?虽然知道它提供了很多端点,有助于应用程序的监控和管理,但如果没有直接的实践案例,还是很难有说服力的. 直 ...

  4. Spring Boot Actuator:在其顶部具有MVC层的自定义端点

    Spring Boot Actuator端点允许您监视应用程序并与之交互. Spring Boot包含许多内置端点,您也可以添加自己的端点. 添加自定义端点就像创建一个从org.springframe ...

  5. 朱晔和你聊Spring系列S1E7:简单好用的Spring Boot Actuator

    本文会来看一下Spring Boot Actuator提供给我们的监控端点Endpoint.健康检查Health和打点指标Metrics等所谓的Production-ready(生产环境必要的一些)功 ...

  6. actuator的原理_使用Spring Boot Actuator监视Java应用程序

    actuator的原理 朋友不允许朋友写用户身份验证. 厌倦了管理自己的用户? 立即尝试Okta的API和Java SDK. 数分钟之内即可在任何应用程序中对用户进行身份验证,管理和保护. 您是否曾与 ...

  7. 如何将 Spring Boot Actuator 的指标信息输出到 InfluxDB 和 Prometheus

    来源:SpringForAll社区 Spring Boot Actuator是Spring Boot 2发布后修改最多的项目之一.它经过了主要的改进,旨在简化定制,并包括一些新功能,如支持其他Web技 ...

  8. spring boot actuator工作原理之http服务暴露源码分析

    spring boot actuator的官方文档地址:https://docs.spring.io/spring-boot/docs/current/reference/html/productio ...

  9. spring Boot Actuator使用

    spring Boot Actuator使用 Spring Boot 的 Actuator 提供了很多生产级的特性,比如监控和度量Spring Boot 应用程序. 官网参考文档Spring Boot ...

最新文章

  1. Linux-什么是二进制包,源码包,RPM包,软件仓库
  2. session_start() [function.session-start]
  3. Linux基础命令---lpr
  4. [ARM异常]-ARM Core中与中断相关的寄存器
  5. 不需要定义神经网络结构就可以恢复模型的两方法
  6. 《DevOps实战:VMware管理员运维方法、工具及最佳实践》——2.3 配置管理
  7. Java 8 Friday:让我们弃用那些旧版库
  8. 修改终端服务器的最大连接数
  9. C++——有关chrono库的duration
  10. 强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning)
  11. bmp格式图像的读写函数(对一个开源代码的封装)
  12. HP Loadrunner 11下载地址
  13. 浅谈工业4.0时代,深信服adesk桌面云如何助力智能工厂.
  14. HFSS印刷偶极子天线(2)
  15. Golang可能会踩的58个坑之高级篇
  16. TX云游戏平台 WeGame 1.0.3.8中文版
  17. English Learning - Day20 作业打卡 2022.12.26 周一
  18. linux系统安装telnet服务
  19. 价值规律在现代社会基本失效
  20. 标题:如何通过python或者云函数定时刷运动步数

热门文章

  1. 数据解读:票房破50亿!《长津湖》凭什么如此火爆?
  2. DNF体验服辅助/稳定/脚本/搬砖/
  3. Winwows下Python命令行执行脚本乱码
  4. 锂电池循环查询android,安卓手机电池寿命怎么看?安卓手机电池循环次数查看方法...
  5. 区块链起点——避免你再错过几个亿
  6. axis2实践(一)JAX-WS入门示例
  7. 数据结构与算法(赫夫曼树,赫夫曼编码)
  8. 计算机英语 多余的,C盘都是英文不敢动手?只要删除这4个文件夹,电脑空间多出10个G!...
  9. IRwUDRYBMA0JAV5VUVddVVRUXFRU
  10. 最新心形拼图小程序源码+带流量主