【SpringCloud】Eureka监控页面 http://localhost:8001/actuator/info 无法显示
【There was an unexpected error (type=Not Found, status=404).No message available】
查遍了相关的博客都没有解决问题,最后在自己一步步追溯下找到了问题的根源,成功解决!
学习eureka时,我们可以通过配置info信息设置对应的信息 在服务提供者的YML文件中我配置了以下这段信息:
info:
app.name: springcloud-service-news
company.name: www.mark.com
build.artifactId: @project.artifactId@
build.version: @project.version@
并且导入了spring-boot-starter-actuator依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>2.5.5</version>
</dependency>
导入的依赖是最新version 2.5.5(可能是因为版本原因才导致以下的问题)
并且也在父工程pom中导入了这段代码:
<build>
<finalName>springcloud-news</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
</plugin>
</plugins>
</build>
eureka监控页面正常显示:
点击进入info界面,出现以下错误:
在检查了几遍代码之后,我排除了写错代码的可能;并且错误信息为No message available,所以很有可能是该页面被拦截。所以我尝试了一下http://localhost:8001/actuator/health,意外地发现可以正常显示: 在疯狂查阅网站上各种相关博客时,发现了官方对端点的启用和暴露也做了配置,但都说info和health两个端点是默认开启的,但是我的却只能显示health,不能显示info;于是我在YML配置中增加了端点的暴露设置:
management:
endpoints:
web:
exposure:
include: "*"
更新配置后,health和info页面都能正常显示了 但是根据博客上的说法,info和health两个端点是默认开启的;我实践的结果却是只有health是默认开始的。那么产生冲突的原因是什么呢?我们接着分析:
我们查看springboot官方API文档 发现默认暴露的端点只有health,并没有info; 而在之前查阅的博客中也有官方API的截图, 暴露的端点是health和info两者;所以我们可以合理推测在actuator更新过程中, 对Exposure默认配置进行了更改
为了验证这个想法,我们查看源码:
首先我们搜索与Exposure相关的类 进入OnAvailableEndpointCondition类, 我们可以看到一个叫Exposure的内部类
我们可以看到一个叫DefaultIncludes的类, 中文意思就是默认包含, Ctrl+鼠标左键进入这个类的源码 我们可以看到Web只默认包含health, 因此验证成功
总结:
我导入的acutator依赖版本是2.5.5, 当时的最新版本, 由于版本更新速度非常迅速, 所以网上的博客都是更老的版本, 最后通过不断地Debug,并且对源码进行分析,终于成功解决这个问题.
|