SpringBoot 2.7.14中web与actuator依赖共存启动异常问询
Spring Boot 2.7.14中actuator与web依赖的启动挂起问题
Spring Boot 2.7.x版本里,spring-boot-starter-actuator和spring-boot-starter-web本身没有官方声明的直接冲突,但在特定场景下确实会出现Tomcat启动挂起、需要手动终止的情况,这类问题大多和JMX配置冲突、Tomcat线程阻塞或依赖传递导致的版本不一致有关。
常见触发场景及解决办法
JMX端口或MBean命名冲突
启用actuator的JMX端点时,可能和Tomcat内部的JMX组件端口、MBean命名产生冲突,引发线程阻塞。可以显式配置JMX参数,避免自动绑定的冲突:spring.jmx.enabled=true spring.jmx.server.port=9090 spring.jmx.default-domain=your-app-custom-domain management.endpoints.jmx.exposure.include=*依赖传递导致Tomcat版本不一致
检查项目依赖树,确认spring-boot-starter-actuator传递引入的Tomcat组件版本,是否和spring-boot-starter-web依赖的Tomcat版本不匹配。可以通过构建工具强制统一Tomcat版本:
Maven示例:<properties> <tomcat.version>9.0.76</tomcat.version> <!-- Spring Boot 2.7.14对应的官方Tomcat版本 --> </properties>Gradle示例:
ext['tomcat.version'] = '9.0.76'Actuator Web端点自动配置干扰
如果只需要JMX监控端点,可以尝试禁用Actuator的Web端点自动配置,仅保留JMX相关配置:management.endpoints.web.exposure.exclude=* management.endpoints.jmx.exposure.include=health,info,metrics
官方相关问题参考
在Spring Boot的官方issue追踪中,有不少用户反馈过类似的启动挂起案例,多数集中在JMX相关的线程阻塞场景,官方给出的核心建议是显式配置JMX参数,或者排查项目中自定义的JMX相关Bean是否存在冲突。
内容的提问来源于stack exchange,提问作者Robert Jones
相关产品推荐
相关产品推荐

