Spring Boot 3.0.6:如何为控制器与Actuator配置不同上下文路径
解决Spring Boot 3.0.6中控制器与Actuator路径分离的问题
问题原因
在Spring Boot 3.x版本中,server.servlet.context-path是全局的Servlet上下文配置,所有Servlet(包括Actuator的端点)都会继承这个路径前缀,因此当你设置server.servlet.context-path=/network后,Actuator的路径会自动叠加为/network/actuator。而旧版本的management.server.servlet.context-path属性在3.x中已被废弃,无法再独立设置Actuator的上下文路径。
解决方案
方案一:全局配置控制器路径前缀(推荐)
无需给每个控制器手动添加@RequestMapping("/network"),通过Spring MVC的全局配置统一给所有控制器添加路径前缀,同时让Actuator路径不受影响:
- 创建WebMvc配置类:
@Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void configurePathMatch(PathMatchConfigurer configurer) { // 为所有标注@RestController或@Controller的控制器添加/network前缀 configurer.addPathPrefix("/network", HandlerTypePredicate.forAnnotation(RestController.class) .or(HandlerTypePredicate.forAnnotation(Controller.class))); } }
- 修改
application.properties配置:
# 仅保留Actuator的路径配置,无需设置server.servlet.context-path management.endpoints.web.base-path=/actuator
这样所有业务控制器的路径都会自动以/network开头,而Actuator的路径保持为/actuator,完全符合需求。
方案二:让Actuator使用独立端口(可选)
如果允许Actuator与主应用使用不同端口,可以通过以下配置实现路径分离:
# 主应用控制器上下文路径 server.servlet.context-path=/network # Actuator独立端口 management.server.port=8081 # Actuator路径 management.server.base-path=/actuator
此时主应用控制器访问路径为http://localhost:8080/network/*,Actuator访问路径为http://localhost:8081/actuator/*。
内容的提问来源于stack exchange,提问作者Erik Pragt
相关产品推荐
相关产品推荐

