当前位置: 首页 > news >正文

Spring Boot Actuator与JMX集成实战

在微服务架构中,监控和管理应用的运行状态是至关重要的。Spring Boot Actuator 提供了一种便捷的方式来监控和管理 Spring Boot 应用,而 JMX(Java Management Extensions)则是一种用于管理 Java 应用的标准技术。本文将通过一个实例,展示如何将 Spring Boot Actuator 的管理端点通过 JMX 暴露出来,并通过 JConsole 进行访问。
一、添加依赖
首先,我们需要在项目的 pom.xml 文件中添加 Spring Boot Actuator 的依赖。以下是完整的依赖配置:
xml复制
<project …>
4.0.0
com.logicbig.example
accessing-actuator-jmx-end-point
1.0-SNAPSHOT
war

org.springframework.boot
spring-boot-starter-parent
2.0.1.RELEASE


<java.version>1.8</java.version>



org.springframework.boot
spring-boot-starter-actuator


org.springframework.boot
spring-boot-starter-web



需要注意的是,spring-boot-starter-web 并不是访问 JMX 端点所必需的。我们在这里添加它是为了防止主方法退出,否则我们需要通过其他方式(如守护线程或命令行输入)来保持应用运行。
二、启动类配置
接下来,我们创建一个 Spring Boot 启动类,用于启动应用:
java复制
@SpringBootApplication
public class JmxEndpointExampleMain {
public static void main(String[] args) {
SpringApplication.run(JmxEndpointExampleMain.class);
}
}
运行上述主类后,Spring Boot 应用将启动,并默认将 Actuator 的管理端点作为 JMX MBeans 暴露在 org.springframework.boot 域下。
三、通过 JConsole 访问端点
启动 JConsole
打开 JConsole 工具(通常位于 JDK 的 bin 目录下),在启动的进程中找到我们的主类 JmxEndpointExampleMain,点击“连接”按钮。
连接到应用
连接时可能会出现“安全连接失败”的提示,直接忽略并点击“不安全连接”。
访问 MBeans
点击“MBean”标签页,Spring 的 MBeans 将在左侧的树形结构中显示在 org.springframework.boot 下。例如,我们可以选择 Beans/Operations/beans,在右侧的面板中点击“beans”按钮(按钮后面的括号表示这是一个远程操作,返回值为 java.util.Map 类型)。
查看返回值
点击“beans”操作按钮后,返回值将显示在“操作返回值”窗口中。由于该窗口的显示不够友好,我们可以将内容复制到 Notepad++ 等文本编辑器中查看。
四、总结
通过上述步骤,我们成功地将 Spring Boot Actuator 的管理端点通过 JMX 暴露出来,并通过 JConsole 进行了访问。这种方式为我们提供了一种灵活且强大的手段来监控和管理 Spring Boot 应用。
在实际开发中,我们还可以通过配置 application.properties 或 application.yml 文件来进一步自定义 Actuator 的行为,例如启用或禁用特定的端点、设置端点的访问路径等。此外,除了 JConsole,我们还可以使用其他 JMX 客户端工具(如 VisualVM)来访问这些端点,具体选择取决于个人喜好和实际需求。
总之,Spring Boot Actuator 与 JMX 的结合为微服务的监控和管理提供了一个强大的工具集,值得在生产环境中广泛使用。

http://www.lryc.cn/news/532979.html

相关文章:

  • mac环境下,ollama+deepseek+cherry studio+chatbox本地部署
  • camera光心检测算法
  • 【MySQL】向后兼容设计规范(无回滚场景)
  • 还搞不透stm32单片机启动过程?一篇文章几百字让你彻底看懂!
  • 无界构建微前端?NO!NO!NO!多系统融合思路!
  • DeepSeek辅助段落扩写的能力怎么样?
  • 分形的魅力:数学与艺术的完美结合
  • 如何通过工业智能网关进行数控机床数据采集?
  • 水波效果
  • 康谋方案 | BEV感知技术:多相机数据采集与高精度时间同步方案
  • 【重新认识C语言----结构体篇】
  • #渗透测试#批量漏洞挖掘#Splunk Enterprise for Windows 任意文件读取漏洞( CVE-2024-36991)
  • 苹果公司宣布正式开源 Xcode 引擎 Swift Build145
  • 7.list
  • Qt+海康虚拟相机的调试
  • 数据库基础练习4(有关索引,视图完整解答)
  • 实操给触摸一体机接入大模型语音交互
  • Excel中对单列数据进行去重筛选
  • K8s —基础指南(K8s - Basic Guide)
  • ABAP开发中的前导零和末尾零
  • Baklib赋能数字内容体验个性化推荐提升用户体验的未来之路
  • 关于Redis的持久化
  • 【C语言标准库函数】指数与对数函数:exp(), log(), log10()
  • 2024美团春招硬件开发笔试真题及答案解析
  • Python内置函数map(), list(), len(), iter(), hex(), hash()的详细解析,包括功能、语法、示例及注意事项
  • [LVGL] 在VC_MFC中移植LVGL
  • MySQL视图索引操作
  • 一次奇怪的空指针问题分析:事务、死锁与隐式回滚
  • 解决aspose将Excel转成PDF中文变成方框的乱码问题
  • .net8.0使用EF连接sqlite数据库及使用Gridify实现查询的简易实现