Spring Boot 2.0 执行器端点(Actuator Endpoint)精简模式 顶
执行器端点 Actuator Endpoint
在基于Spring Boot的应用程序内通过Endpoint可以根据应用程序业务需求实现自定义的监控接口,但目前的版本中实现自定义Endpoint需要实现该接口内的以下几个方法, 代码稍显复杂:
String getId();
boolean isEnabled();
boolean isSensitive();
T invoke();
而经过重新设计后的Spring Boot 2 在Endpoint方面带来了全新的架构,实现自定义Endpoint的代码相当精简,可读性更强,例如以下代码实现了URI路径为/customPoint的一个监控点, 此特性会在2.0.0.M4以及当前的2.0.0.BUILD-SNAPSHOT中得到支持。
@Endpoint(id = "customPoint")
public class CustomEndPoint {
@ReadOperation
public String getCustom(@Selector String name) {
return "MyName is ." + name;
}
}
经过测试,目前2.0.0.BUILD-SNAPSHOT版本的Endpoint也可以在Kotlin代码中以更精简的形式实现,以下的代码实现了/ktpoint/{name} 的只读接口函数和可写控制接口, 不过目前在可写类监控点中通过POST方式提交JSON格式的参数一直无法正常传送到Endpoint的WriteOperation方法中,暂未查明具体原因。
URI (HTTP.Method) |
注解 |
说明 |
---|---|---|
/ktpoint/{name} (GET) |
@ReadOperation |
只读类监控点 |
/ktpoint/{name} (POST) |
@WriteOperation |
可写类监控点 |
@Endpoint(id = "ktpoint")
class MyKtPoint(var pointName: String) {
@ReadOperation
fun getIt(@Selector name: String) = hello("MyName is .${name} ${pointName}")
@WriteOperation
fun changePointName(@Selector name: String): KtPoint {
this.pointName = name
return KtPoint(this.pointName)
}
}
为保证以上的Endpoint能顺利通过响应的URL访问,需要以Spring Bean的方式注册到系统的上下文环境中,以下两种方式都可以确保Endpoint顺利注册:
注解 |
注解所在位置 |
代码示例 |
---|---|---|
@Component |
自定义Endpoint类 |
@Endpoint(id = "customPoint") @Component public class CustomEndPoint { @ReadOperation public String getCustom(@Selector String name) { return "MyName is ." + name; } } |
@Bean |
@Configuration类 |
@Bean public CustomEndPoint getEndpoint() { return new CustomEndPoint(); } |
以上示例的源码文件可在码云仓库下载,链接地址: act-demo2,
参考资料:
https://spring.io/blog/2017/08/22/introducing-actuator-endpoints-in-spring-boot-2-0
- Cannot find module 'socket.io'
- 【学术】独热编码如何在Python中排列数据?
- 比特币的私钥【区块链生存训练】
- Unity3D学习笔记第一课
- Extjs4处理后台json数据中日期和时间的方法
- 机器学习:Python测试线性可分性的方法
- Java 机器学习库Smile实战(一)SVM
- 交易Transaction【区块链生存训练】
- 马尔可夫链文本生成的简单应用:不足20行的Python代码生成鸡汤文
- 最长递增子序列
- dedecms批量删除文档关键词可以吗
- 【学术】在C ++中使用TensorFlow训练深度神经网络
- 一个canonical标签解决site不在首页的问题
- 由一道面试题来了解进程间的通信
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 5个好用的 CSS 函数
- java1.8中Object类源码分析
- 多线程基础(六):Object的wait方法以及notify与notifyAll的区别
- Day15:反转链表
- Day16:合并两个排序的链表
- 大厂面试爱问的「调度算法」,20 张图一举拿下
- Day17:树的子结构
- 多线程基础(七):关于HotSpot中notify方法不具备随机性的证明
- Day18:二叉树的镜像
- ksubdomain 无状态域名爆破工具
- Day19:顺时针打印矩阵
- 疑似 KimsukyAPT 组织最新攻击活动样本分析
- 查找被删除但仍然占据磁盘的文件
- WPF 获取本机所有字体拿到每个字符的宽度和高度
- WPF 自己封装 Skia 差量绘制控件