如何在不升级Spring Boot 2.3.0时修改Actuator的Micrometer版本
解决方法
直接在dependencies中声明1.9.0版本micrometer-core不生效,是因为Spring Boot 2.3.x通过内置BOM统一管控了所有Micrometer组件的版本,dependencyManagement中声明的版本优先级高于普通依赖声明的版本,因此自定义版本被覆盖。在不升级Spring Boot版本的前提下,优先选择以下侵入性最低的配置方式:
方案1:重写内置版本属性(推荐)
Spring Boot 2.3.x将所有Micrometer组件的版本绑定到micrometer.version这个Maven属性上,只需要在项目pom.xml的properties节点重写该属性值,就能全局替换所有Micrometer相关依赖的版本,不需要逐个修改依赖配置:
<properties> <!-- 保留项目原有其他配置,新增以下行 --> <micrometer.version>1.9.0</micrometer.version> </properties>
属性配置完成后,依赖按正常方式引入即可,不需要额外指定版本,也不需要排除actuator内置的micrometer依赖:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-influx</artifactId> </dependency> </dependencies>
配置完成后执行以下校验操作:
- 执行命令
mvn dependency:tree | grep micrometer,查看输出结果中所有micrometer开头的依赖版本是否均为1.9.0,确认不存在多版本共存的情况 - 如果你是通过导入
spring-boot-dependenciesBOM而非继承spring-boot-starter-parent的方式管理依赖,需要确认属性配置在BOM导入节点之前加载,避免属性值被覆盖 - 启动项目验证actuator端点加载、Influx指标上报逻辑是否正常,Micrometer 1.9.x对Spring Boot 2.3.x兼容性良好,一般不会出现运行时问题
方案2:排除旧版本后显式引入(备用)
如果项目POM结构特殊,重写属性的方式无法生效,可以在引入actuator依赖时排除内置的旧版micrometer-core,再显式引入指定版本的所有Micrometer组件:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> <exclusions> <exclusion> <groupId>io.micrometer</groupId> <artifactId>micrometer-core</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-core</artifactId> <version>1.9.0</version> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-influx</artifactId> <version>1.9.0</version> </dependency> </dependencies>
该方案需要手动维护所有Micrometer组件的版本,后续升级时需要逐个修改版本号,维护成本更高,仅作为备选方案使用。
内容的提问来源于stack exchange,提问作者codesup
相关产品推荐
相关产品推荐

