Spring Boot 2.5.6集成Actuator+Micrometer触发NoSuchMethodError异常
问题根因
这是典型的依赖版本不兼容问题,触发原因如下:
- Spring Boot 2.5.6 内置兼容的
micrometer-core版本为1.7.x系列,但你的项目实际引入的是1.3.5版本,版本跨度过大 DistributionStatisticConfig.Builder.serviceLevelObjectives(double[])是micrometer-core 1.4.0及以上版本才新增的API,1.3.5版本不存在该方法,当spring-boot-actuator-autoconfigure调用这个不存在的方法时就会抛出NoSuchMethodError- 父POM强制指定了低版本
micrometer-core的版本,你之前的依赖覆盖操作没有生效,所以才会出现该问题 - 两个报错场景的触发逻辑:
- 事务开启时报错:事务需要获取HikariCP数据库连接,HikariCP初始化metrics统计器时会调用micrometer的相关API
- 调用actuator接口时报错:WebMvcMetricsFilter需要统计接口请求耗时,同样会调用到缺失的API
解决方案
- 方案1:强制覆盖micrometer-core版本(推荐,保留actuator全部功能)
在当前项目的pom.xml的<dependencyManagement>节点中,手动指定与Spring Boot 2.5.6匹配的micrometer版本:
<dependencyManagement> <dependencies> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-core</artifactId> <version>1.7.12</version> </dependency> </dependencies> </dependencyManagement>
如果是Gradle项目,在build.gradle中添加以下配置即可:
ext['micrometer.version'] = '1.7.12'
- 方案2:禁用metrics自动配置(不需要指标统计功能时可选)
在Spring Boot启动类上添加排除配置,关闭相关自动装配即可:
@SpringBootApplication(exclude = { MetricsAutoConfiguration.class, DataSourcePoolMetricsAutoConfiguration.class, WebMvcMetricsAutoConfiguration.class })
- 方案3:不需要actuator功能时,直接移除pom.xml中所有actuator相关依赖即可彻底解决该问题
内容的提问来源于stack exchange,提问作者ashur
相关产品推荐
相关产品推荐

