原因
报io.micrometer.prometheus.HistogramFlavor
是因为导入依赖时版本的问题,上面是我最初导入的依赖,去掉<version>1.1.4</version>
就可以了,因为SpringBoot的父依赖已经帮你确定好了
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>1.1.4</version>
</dependency>
问题排查
最开始发现这个问题是点入了spring-boot-starter-actuator
,发现它里面有一个关于Micrometer的写了1.9.7,然后开始怀疑micrometer-registry-prometheus
依赖的版本有问题。然后去掉了依赖版本,刷新了一下Maven发现不写版本也可以运行,SpringBoot已经帮你定好了版本。
之后可以确定一下micrometer-registry-prometheus
真实的版本,一路进parent
进行。
正常进来这里就可以看见了,但这个藏的还挺深,得继续进micrometer-bom
,之后就可以看见micrometer-registry-prometheus
的版本了,确实是1.9.7。
也有更快的方式,直接在Maven的依赖里看。
补充
顺便补充一下,parent类的东西。SpringBoot中有些依赖是不用写版本号的,因为继承了parent标签,人家SpringBoot就帮你定好了版本。
在pom.xml中,按住Ctrl点击spring-boot-starter-parent
,进入后发现spring-boot-starter-parent
自身并没有定义dependencyManagement,而是继续依赖于了spring-boot-dependencies
。
先看一下spring-boot-starter-parent
,它主要是添加了一些默认的配置,像指定了使用的 JDK 版本号,编码方式,还有一些比较高级的像资源过滤、插件配置等,具体可参考这篇文章。
而进入spring-boot-dependencies
你就可以看到SpringBoot提供的各种依赖的版本号了。