Spring Boot 2.5.5整合CXF 3.4.5后actuator端点404无法访问求助
解决方案步骤
1. 确认Actuator依赖正确引入
Maven pom.xml中要加入actuator starter依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
Gradle配置对应加入:
implementation 'org.springframework.boot:spring-boot-starter-actuator'
2. 修正application配置文件(application.yml/properties)
添加以下配置开启Actuator端点暴露,避免默认配置仅暴露health端点甚至完全不暴露:
yml格式:
management: endpoints: web: exposure: include: "*" # 按需调整要暴露的端点,比如仅暴露health可以写"health" base-path: /actuator # 保持默认路径,确认没有被修改为其他值 endpoint: health: show-details: always # 可选,按需配置健康检查详情展示规则 # 确认没有配置management.server.port,否则Actuator会跑在指定的独立端口上 # 确认server.servlet.context-path没有配置,否则访问路径要加前缀:http://localhost:8082/{context-path}/actuator
properties格式:
management.endpoints.web.exposure.include=* management.endpoints.web.base-path=/actuator management.endpoint.health.show-details=always
3. 修正CXF Servlet配置,禁用自动注册避免冲突
如果你引入了cxf-spring-boot-starter,默认会自动注册CXFServlet,和你手动定义的ServletRegistrationBean冲突,先在配置文件添加配置关闭自动注册:
cxf: servlet: enabled: false
然后给你手动定义的CXF Servlet设置更高优先级,确保/service/*路径的请求优先交给CXF处理:
@Bean public ServletRegistrationBean<CXFServlet> cxfServlet() { ServletRegistrationBean<CXFServlet> registration = new ServletRegistrationBean<>(new CXFServlet(), "/service/*"); registration.setOrder(Ordered.HIGHEST_PRECEDENCE); return registration; }
4. 删除冗余的DispatcherServlet配置
你手动定义的DispatcherServlet和对应的RegistrationBean完全不需要,Spring Boot会自动配置,手动配置反而会覆盖默认规则导致路径映射异常,直接删除这两个Bean的定义即可。
所有配置完成后重启服务,访问http://localhost:8082/actuator即可看到所有已暴露的端点列表。
内容的提问来源于stack exchange,提问作者Kamil Święch
相关产品推荐
相关产品推荐

