Spring Boot /actuator 返回 404 未找到
Posted
技术标签:
【中文标题】Spring Boot /actuator 返回 404 未找到【英文标题】:Spring Boot /actuator returns 404 not found 【发布时间】:2019-09-16 12:47:47 【问题描述】:我正在使用 spring boot 2.1.4.RELEASE
,目前正在尝试访问 http://localhost:8080/actuator,但我发现 404 未找到。我不确定我在这里做错了什么。下面是我的 pom 依赖项-
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dir</groupId>
<artifactId>api</artifactId>
<version>2.4.0</version>
<packaging>jar</packaging>
<name>Search</name>
<description>Search</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<distributionManagement>
<repository>
<id>Releases</id>
<name>repo1.releases</name>
<url>http://www.something.com</url>
</repository>
<snapshotRepository>
<id>Snapshots</id>
<name>repo1.com</name>
<url>http://repo1.com/artifactory/Snapshots</url>
</snapshotRepository>
</distributionManagement>
<properties>
<!--These two should be in all ParentPOMs -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- Keep this version in sync with the pom's version ignoring "-SNAPSHOT" -->
<applicationVersion>1.0.0</applicationVersion>
<elasticsearch.version>5.2.0</elasticsearch.version>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webflux</artifactId>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.7</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>x-pack-transport</artifactId>
<version>5.2.1</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>apache-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.7.0</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- Spring boot actuator to expose metrics endpoint -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Micormeter core dependecy -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-core</artifactId>
</dependency>
<!-- Micrometer Prometheus registry -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<environmentVariables>
<version>9.9.9</version>
<basePath>http://sample-basepath.com</basePath>
</environmentVariables>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
</project>
属性文件配置
management.endpoint.metrics.enabled=true
management.endpoints.web.exposure.include=*
management.endpoint.prometheus.enabled=true
management.metrics.export.prometheus.enabled=true
management.endpoint.health.show-details=always
management.endpoint.beans.enabled=true
当我运行应用程序时,我确实在控制台中看到了这个
2019-04-27 00:04:25.406 INFO 32522 --- [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 16 endpoint(s) beneath base path '/actuator'
2019-04-27 00:04:25.534 INFO 32522 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '/myendpoint'
【问题讨论】:
你试过http://localhost:8080/myendpoint/actuator
吗?
【参考方案1】:
请检查您是否配置了server.servlet.contextPath=/myendpoint
如果你这样做了,请尝试 localhost:8080/server.servlet.contextPath/actuator
【讨论】:
是的,我已经配置了 server.servlet.context-path=/myendpoint,但是当我尝试通过浏览器或邮递员访问 - localhost:8080/myendpoint/actuator 时,我得到的是 401 未授权而不是 404 未找到。 我的应用使用 application.yml 而不是 application.properties,我发现上下文路径设置为 server: context-path: /some/path【参考方案2】:Spring Boot Actuator URL 通过 SpringBoot Releases 改变, 最初我们可以使用https://localhost:8080/actuator访问Actuator URL
在 springboot 2.0.0 的早期里程碑版本中,URL 是 https://localhost:8080/application
现在的springboot版本可以通过https://localhost:8080/actuator访问
【讨论】:
我尝试访问 localhost:8080/actuator 而不是 localhost:8080/actuator,现在我看到 java.lang.IllegalArgumentException: Invalid character found in method name。 HTTP 方法名称必须是标记。我相信这是因为我的客户端端点没有配置 https。 亲爱的@JonAbraham 您提到两者都为 localhost:8080/actuator 有什么区别?【参考方案3】:按照上面的答案试试
http://localhost:8080/<server.servlet.context-path>/actuator/
但是如果它显示错误,那么可能的原因是你没有在 pom.xml 中包含依赖项
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
【讨论】:
【参考方案4】:某些执行器端点已禁用,必须先启用才能使用它们。我试图访问/actuator/beans
,结果证明它就是这样一个端点。根据the docs,您只需在application.properties
文件中启用它们:
management.endpoints.web.exposure.include=health,info,beans
【讨论】:
【参考方案5】:我认为您的应用程序中有一个上下文路径 /myendpoint。
请尝试使用此端点 http://localhost:8080/myendpoint/actuator
【讨论】:
我试过这个,现在我得到 401 未经授权。 你能分享完整的 pem.xml 文件吗@JonAbraham @RAJKUMAR 我已经发布了完整的 POM.xml 文件供您查看 我在添加执行器依赖项后看到问题出在控制台中,我看不到这些类型的日志 -sbaewsWebMvcEndpointHandlerMapping : Mapped "[/actuator/auditevents],methods=[GET] ,produces=[application/vnd.spring-boot.actuator.v2+json || application/json]" 到公共 java.lang.Object 只是一个更新,我可以看到回复 - localhost:8080/actuator。我只是删除了执行器 jar 并进行了 Maven 全新安装。之后我能够看到响应【参考方案6】:即使在完全遵循 Spring 文档之后,我也遇到了相同的 404 错误。最终对我有用的是删除执行器依赖项和 jar,然后使用 mvn clean install 再次添加它。成功了:)
【讨论】:
【参考方案7】:这是我在谷歌上搜索遇到的类似问题时的第一个结果。不幸的是,上述解决方案都不适合我,但另一个消息来源提到我需要设置管理端口:
management.server.port=8080
这让我可以打
http://localhost:8080/actuator/
【讨论】:
也可以考虑management.endpoints.web.base-path=/manage
【参考方案8】:
这对我来说是版本冲突,这就是未公开执行器端点的原因。我从 pom 文件中删除了 spring-boot-starter-actuator 的版本以使其工作
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<!--<version>1.5.6.RELEASE</version>-->
</dependency>
【讨论】:
【参考方案9】:因为你误会了。
暴露的端点有两种方式,请仔细阅读文档。一个暴露给 JMX,另一个暴露给 WEB。
显然,如果您启用 bean 端点,它只会暴露给 JMX。
【讨论】:
【参考方案10】:如果你得到 401 未授权,那么你应该在你的令牌中添加滚动“ACTUATOR”,那么只有你能够点击应用程序的 /actuator 端点。
【讨论】:
以上是关于Spring Boot /actuator 返回 404 未找到的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Spring Boot Actuator 返回 404 而不是 401?
Spring Boot Actuator /env 端点以 XML 形式返回数据 - 为啥?
Spring Boot Actuator 为 Docker 上的应用程序返回