Tomcat异常:javax.management.InstanceNotFoundException: com.alibaba.druid:type=DruidDataSourceStat

本文解决了一位同事在开发服务器上部署两个Tomcat时出现的数据库连接问题,其中一个使用了阿里巴巴的Druid连接池,通过修改catalina.sh文件中的JAVA_OPTS参数,成功解决了两个Tomcat之间的冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天,负责前端开发的同事找到我,表示后台服务调不了,于是,登陆服务器查看了tomcat日志,错误如下:

经过查找,原因是另一位同事,在开发服务器也部署了一个tomcat,用于项目测试,两个tomcat都是用alibaba的druid连接数据库导致的报错

 

解决方法

修改Tomcat bin目录下的的 catalina.sh:# OS specific support.  $var _must_ be set to either true or false.cygwin=false之间

增加此句代码: JAVA_OPTS=”-Ddruid.registerToSysProperty=true”

 

参考文章:

https://www.cnblogs.com/zwdx/p/9075852.html

<think>嗯,我遇到了一个关于JMX异常的问题。用户提供了两个引用片段,但看起来它们是重复的错误信息,都指向同一个异常javax.management.InstanceNotFoundException,具体是找不到org.springframework.boot:type=Admin,name=SpringApplication这个MBean。用户明确表示想解决JMX中找不到applicationbeans的问题。我需要仔细思考这个异常的实际原因。JMX是Java管理扩展,用于监控和管理应用。在SpringBoot中,AdminMBean通常会在应用启动时自动注册。这个异常表明该MBean没有被正确注册,可能出现在SpringBoot应用的启动过程中。分析可能导致问题的几个方向:首先是依赖问题,用户项目中是否缺少了必要的spring-boot-actuator依赖。这个依赖包含了对JMX暴露管理接口的支持。应该检查pom.xml或build.gradle文件,确保包含这个依赖且版本与SpringBoot主版本兼容。另一个常见原因是JMX配置问题。可能是配置禁止了JMX暴露,或者MBean服务器设置不当。需要检查application.properties或application.yml文件中的相关配置项,比如spring.jmx.enabled是否被错误地设置为false,以及MBean导出相关的属性是否被禁用。异常处理机制也可能导致问题。AdminMBean的注册通常在SpringApplication启动阶段进行。如果应用启动发生异常中断了初始化流程,可能导致MBean未被注册。这时需要检查日志中是否有更早的、更根本的异常堆栈,优先解决那个问题。还有版本兼容性问题值得考虑,特别是当用户升级了SpringBoot但Actuator依赖版本不匹配时。应该推荐用户确认依赖版本是否一致。对于解决方案,我会分步骤引导用户排查:从依赖检查开始,然后查看配置,接着分析应用启动日志寻找前置异常,再考虑SpringBoot版本兼容性,最后测试JMX连接以验证是否解决。我会确保每一步都有明确的操作指导,比如检查依赖的确切坐标和配置属性的正确写法。还要考虑到用户可能处于不同的开发环境,因此需要提供通用的解决方法。同时提醒用户关注应用初始化是否成功完成,因为如果启动失败,注册MBean的步骤根本不会执行。最后生成的相关问题应覆盖JMX调试的常见场景,帮助用户全面了解相关知识。</think> Spring Boot 应用启动时出现 `javax.management.InstanceNotFoundException: org.springframework.boot:type=Admin,name=SpringApplication` 错误,通常表示 JMX MBean 注册失败。以下是**详细排查步骤**: --- ### 🔍 排查与解决方案(逐步操作) #### ✅ 步骤 1:验证依赖完整性(关键!) ```xml <!-- Maven 示例:检查 pom.xml --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> <!-- 必须包含 --> </dependency> ``` ```gradle // Gradle 示例:检查 build.gradle implementation 'org.springframework.boot:spring-boot-starter-actuator' // 必须包含 ``` * **重点**:`spring-boot-actuator` 是 JMX MBean 注册的核心依赖,缺失会导致此错误[^1]。 #### ⚙️ 步骤 2:检查 JMX 配置 在 `application.properties` 或 `application.yml` 中确认: ```properties # 确保启用 JMX spring.jmx.enabled=true # 检查 MBean 导出配置(默认开启) spring.jmx.unique-names=true ``` * 若存在 `spring.jmx.enabled=false` 需删除或改为 `true`。 #### 🚨 步骤 3:分析应用启动日志 * 在启动日志中搜索 **前置错误**(如 Bean 初始化失败、端口冲突等)。 * **原因**:若 Spring Context 初始化失败(例如 `@Bean` 创建异常),Admin MBean 将无法注册[^2]。 #### 🔄 步骤 4:验证 Spring Boot 版本兼容性 * 使用 Spring Boot ≥ 2.0 时,确保所有 starter 依赖版本一致(通过 `spring-boot-dependencies` 管理)。 * **版本冲突示例**:旧版 Actuator 与新版 Boot 不兼容。 #### 🌐 步骤 5:手动测试 JMX 连接 1. 启动应用后运行 JConsole 或 VisualVM 2. 连接本地进程 3. 检查 MBean 是否存在: ```plaintext MBean 路径:org.springframework.boot > type=Admin > name=SpringApplication ``` * 若不存在,返回步骤 1-4 重新排查。 --- ### 📌 原因总结 | 原因 | 解决方向 | |---------------------|----------------------------| | 缺少 Actuator 依赖 | 添加 `spring-boot-starter-actuator` | | JMX 被禁用 | 配置 `spring.jmx.enabled=true` | | 应用启动失败 | 优先解决启动阶段的异常日志 | | 依赖版本冲突 | 统一 Spring Boot 全家桶版本 | > 💡 **经验提示**:90% 的案例因 **Actuator 依赖缺失** 或 **启动过程中断** 导致[^1][^2]。 --- ### 🧩 相关问题 1. **如何在 Spring Boot 中自定义 JMX MBean?** (涉及 `@ManagedResource` 注解和 `MBeanExporter` 配置) 2. **应用启动成功但 MBean 仍不可见,如何进一步诊断?** (需检查 JVM 参数、防火墙限制或自定义 `MBeanServer`) 3. **Spring Boot Actuator 的 JMX 端点与 HTTP 端点有何区别?** (对比监控数据暴露方式与安全配置) 4. **如何通过 JMX 动态修改应用运行时参数?** (使用 `Jolokia` 代理或自定义 `MBeanOperation`) 5. **哪些场景需要禁用 Spring Boot JMX?如何安全禁用?** (生产环境安全策略与 `spring.jmx.enabled=false` 的副作用分析) [^1]: JMX MBean 注册依赖 Actuator 模块,缺失会导致 `InstanceNotFoundException` [^2]: 应用初始化失败会中断 MBean 注册流程,需优先解决启动错误
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值