Error starting Tomcat context. Exception: org.springframework.beans.factory.BeanCreationException. Message: Error creating bean with name 'servletEndpointRegistrar' defined in class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/web
时间: 2025-07-01 18:59:59 浏览: 3
在Spring Boot应用中,如果在启动Tomcat时遇到`org.springframework.beans.factory.BeanCreationException`错误,并且提示与`servletEndpointRegistrar`相关的问题,通常意味着在创建该Bean时发生了配置或依赖冲突。此类问题常见于健康检查端点(actuator)相关的组件,特别是在引入了多个涉及Web服务器的依赖时[^2]。
### 常见原因分析
1. **依赖冲突**
最常见的原因是项目中同时引入了多个与Web容器相关的依赖,例如`spring-boot-starter-web`和`spring-cloud-starter-gateway`等。这些依赖可能各自引入了不同的嵌入式容器支持(如Tomcat、Netty),从而导致上下文初始化失败。此时,`servletEndpointRegistrar`无法正确注册端点,进而抛出`BeanCreationException`。
2. **Actuator版本不兼容**
如果使用的Spring Boot版本较旧,而引入的Actuator模块版本较高,可能会出现方法缺失的问题,例如`org.springframework.boot.actuate.health.CompositeHealthIndicator`类中某些方法不存在,导致Bean创建失败[^3]。
3. **自动配置冲突**
在某些情况下,Spring Boot尝试自动配置嵌入式Web服务器时,会因某些Bean的定义冲突而导致启动失败。例如,引入了一个不必要的数据源依赖,却未配置数据库连接信息,也会导致上下文加载失败[^4]。
---
### 解决方案
#### 1. 排除冲突依赖
如果使用的是Spring Cloud Gateway或其他非传统Web容器的应用,应排除默认的Tomcat依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
```
或者直接移除该依赖,避免与网关使用的Netty容器发生冲突[^2]。
#### 2. 检查Spring Boot与Actuator版本一致性
确保`spring-boot-starter-actuator`的版本与当前Spring Boot主版本一致。可以在`pom.xml`或`build.gradle`中显式指定版本号以保持一致性:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>2.7.15</version> <!-- 确保与Spring Boot主版本匹配 -->
</dependency>
```
#### 3. 使用`@SpringBootApplication`的exclude属性排除干扰配置
若怀疑是某些自动配置类导致的问题,可在启动类上使用`exclude`参数排除特定的自动配置类,例如:
```java
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
```
此方式适用于误引入数据库依赖但未实际使用的情况[^4]。
#### 4. 启用调试输出查看详细错误
启用Spring Boot的调试日志可以帮助定位具体是哪个Bean创建失败:
```yaml
debug: true
```
这将打印出所有自动配置报告,有助于识别被跳过的配置项以及失败的原因。
---
### 总结
`servletEndpointRegistrar`的创建异常通常是由于依赖管理不当或版本不兼容所致。解决这类问题的关键在于:
- 明确项目所使用的Web容器类型;
- 避免引入冲突的Starter依赖;
- 确保各组件版本一致;
- 必要时排除不必要的自动配置类。
---
阅读全文
相关推荐










