无法访问Spring Boot健康检查及Swagger文档端点问题排查
你遇到的问题核心在于Maven打包方式不符合Spring Boot规范:使用maven-assembly-plugin生成jar-with-dependencies的打包方式,会破坏Spring Boot的自动配置结构,导致Actuator和Swagger的自动配置类无法被加载,因此对应的端点未注册到容器中。而IDEA直接运行时,使用Spring Boot原生类加载机制,能正确加载所有配置,所以端点正常。
1. 替换Maven打包插件
移除pom.xml中的maven-jar-plugin和maven-assembly-plugin,改用Spring Boot官方插件spring-boot-maven-plugin,它会生成符合Spring Boot规范的可执行Jar,自动处理类路径、自动配置入口等逻辑。
修改后的<build>配置:
<build> <!-- 可选:指定最终Jar文件名,匹配DockerFile中的名称 --> <finalName>my-api</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>${maven-compiler.version}</version> <configuration> <release>17</release> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> <configuration> <mainClass>com.api.myApp</mainClass> </configuration> </plugin> </plugins> </build>
2. 确认Swagger端点配置(可选)
如果Swagger仍无法访问,在application.properties中补充SpringDoc的路径配置:
# SpringDoc Swagger配置 springdoc.api-docs.path=/v3/api-docs springdoc.swagger-ui.path=/swagger-ui.html
访问路径应为:http://localhost:9000/api/swagger-ui.html
3. 验证DockerFile配置
确保DockerFile中COPY的Jar文件名与Maven打包后的文件名一致(如果在pom.xml中设置了<finalName>my-api</finalName>,则无需修改)。
关键原因说明
maven-assembly-plugin的jar-with-dependencies会将所有依赖的class文件合并到单个Jar中,未遵循Spring Boot的BOOT-INF目录结构,导致Spring Boot无法识别并加载Actuator、SpringDoc等组件的自动配置类,最终这些组件的端点不会被注册到Web容器中。
内容的提问来源于stack exchange,提问作者Reid2

