You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot fat jar部署至应用服务器后Actuator端点访问报404

SpringBoot FatJar部署时Actuator端点404排查思路

按以下优先级从高到低排查即可:

  • 先核对运行时实际生效的配置,别只看源码里写的yml
    SpringBoot有明确的配置优先级规则,fatjar启动时,jar包同级config目录下的配置、启动命令传入的参数、系统环境变量、服务器全局配置的优先级都高于jar包内置的配置文件。启动时加--debug参数打印自动配置和配置绑定报告,或者直接在启动日志里搜management.server.port、management.endpoints.web.exposure.include、management.endpoints.web.base-path这些配置项的实际值,确认没有被外部配置覆盖:比如端口被改成其他值、端点暴露列表被清空、actuator基础路径被改成了非/actuator的值。
  • 确认actuator依赖真的被打进fatjar了
    本地IDE启动会直接加载项目里声明的所有依赖,但打包时如果spring-boot-starter-actuator被设成了provided这类不会被打进产物包的scope,或是maven/gradle打包插件配置了依赖排除、多profile切换时生产包没引入actuator依赖,最终的fatjar里根本没有actuator的自动配置类,自然不会加载对应端点。验证方法很简单:解压fatjar,进BOOT-INF/lib目录看有没有spring-boot-actuator-*.jar、spring-boot-actuator-autoconfigure-*.jar两个包,没有就改打包配置重新构建。
  • 核对9090端口的实际监听进程
    服务器上执行netstat -tulpn | grep 9090,看9090端口的监听进程是不是你当前跑的SpringBoot应用,别是其他服务占了9090端口,请求打到别的服务上自然返回404。同时翻启动日志,确认actuator的独立管理端口正常完成监听。
  • 翻启动日志找端点暴露记录
    Actuator正常初始化完成时,启动日志里一定会打类似下面的记录:
    Exposing 3 web endpoint(s) beneath base path '/actuator'
    
    找不到这行的话,说明actuator自动配置根本没生效,优先查有没有配置management.endpoints.web.enabled=false这类全局禁用开关,或是前面说的依赖缺失问题。
  • 排查自定义拦截逻辑是否干扰请求
    如果项目里写了全局Servlet过滤器、拦截器,而且没有对actuator的路径做排除,可能出现拦截器提前拦截请求、直接返回404的情况,可以临时关闭自定义拦截组件验证是否能正常访问端点。

对应问题场景:本地IDE启动应用时可正常通过http://localhost:9091/actuator/health访问端点,fatjar部署到服务器后,自定义业务API可正常访问,仅actuator端点访问返回如下404响应:

{"timestamp":"2022-06-30T20:57:12.191+00:00","status":404,"error":"Not Found","path":"/actuator/health"}

问题中给出的源码内置actuator配置如下:

management:
  server:
    port: 9090
  endpoints:
    web:
      exposure:
        include: "health,info,logfile"

内容的提问来源于stack exchange,提问作者Thomas Grady

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 00:01:20