首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【Java】已解决:org.springframework.boot.context.embedded.EmbeddedServletContainerException

【Java】已解决:org.springframework.boot.context.embedded.EmbeddedServletContainerException

作者头像
屿小夏
发布2025-05-24 10:07:10
发布2025-05-24 10:07:10
3510
举报
文章被收录于专栏:IT杂谈学习IT杂谈学习

已解决:org.springframework.boot.context.embedded.EmbeddedServletContainerException

一、分析问题背景

在使用Spring Boot进行Web开发时,开发者有时会遇到org.springframework.boot.context.embedded.EmbeddedServletContainerException的异常。这种异常通常与嵌入式Servlet容器(例如Tomcat、Jetty等)配置相关。在启动Spring Boot应用程序时,嵌入式Servlet容器无法正确启动,从而抛出该异常。以下是一个典型场景:

场景:在Spring Boot项目中配置自定义的嵌入式Tomcat服务器,并尝试运行应用程序时,遇到启动失败的问题。

示例代码片段:

代码语言:javascript
复制
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Bean
    public WebServerFactoryCustomizer<TomcatServletWebServerFactory> customizer() {
        return (factory) -> {
            // 自定义配置,例如端口号或其他Tomcat设置
            factory.setPort(8080);
        };
    }
}

二、可能出错的原因

导致org.springframework.boot.context.embedded.EmbeddedServletContainerException报错的原因可能包括但不限于:

  1. 端口冲突:配置的端口号已被占用,导致Tomcat无法启动。
  2. 缺少依赖:Spring Boot项目中缺少必要的嵌入式Servlet容器依赖。
  3. 配置错误:自定义配置不正确,导致嵌入式Servlet容器无法正常初始化。
  4. 版本不兼容:Spring Boot与嵌入式Servlet容器的版本不兼容。

三、错误代码示例

以下是一个可能导致该报错的代码示例,并解释其错误之处:

代码语言:javascript
复制
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Bean
    public WebServerFactoryCustomizer<TomcatServletWebServerFactory> customizer() {
        return (factory) -> {
            // 错误的自定义配置,例如无效的端口号
            factory.setPort(-1);
        };
    }
}

错误分析:

  1. 无效的端口号:配置了一个无效的端口号(-1),导致Tomcat无法启动,从而抛出EmbeddedServletContainerException异常。

四、正确代码示例

为了正确解决该报错问题,我们需要确保端口号有效,并且项目中包含必要的依赖和正确的配置。以下是正确的代码示例:

代码语言:javascript
复制
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Bean
    public WebServerFactoryCustomizer<TomcatServletWebServerFactory> customizer() {
        return (factory) -> {
            // 正确的自定义配置,使用有效的端口号
            factory.setPort(8080);
        };
    }
}

同时,确保在pom.xml文件中包含必要的嵌入式Servlet容器依赖,例如:

代码语言:javascript
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>

五、注意事项

在编写和配置Spring Boot应用程序时,需要注意以下几点:

  1. 端口号有效性:确保配置的端口号有效且未被占用,避免端口冲突。
  2. 依赖完整性:确保项目中包含必要的嵌入式Servlet容器依赖,以支持应用程序的正常运行。
  3. 配置正确性:在进行自定义配置时,确保配置项正确且符合规范,避免因配置错误导致的异常。
  4. 版本兼容性:检查Spring Boot与嵌入式Servlet容器的版本兼容性,避免因版本不兼容导致的问题。
  5. 日志查看:启动应用程序时,注意查看控制台输出的日志信息,以便及时发现和解决问题。

通过以上步骤和注意事项,可以有效解决org.springframework.boot.context.embedded.EmbeddedServletContainerException报错问题,确保Spring Boot应用程序的正常启动和运行。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-09-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、分析问题背景
  • 二、可能出错的原因
  • 三、错误代码示例
  • 四、正确代码示例
  • 五、注意事项
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档