IntelliJ中Spring Boot无需Tomcat本地运行API原理及embedded Tomcat解惑
Spring Boot本地运行API的内部机制与嵌入式Tomcat解析
一、IntelliJ中Spring Boot应用运行API的完整流程
- 自动引入嵌入式容器依赖:Spring Boot的
spring-boot-starter-webstarter包中,默认包含了嵌入式Tomcat的核心jar包(如tomcat-embed-core、tomcat-embed-el等),这些依赖会通过Maven或Gradle自动下载,不需要你手动安装Tomcat。 - 启动类触发执行:点击IntelliJ的「Run Application」后,程序会执行带有
@SpringBootApplication注解的启动类的main方法,调用SpringApplication.run()初始化整个应用。 - Spring容器与API接口加载:Spring会自动扫描项目中所有标注
@RestController、@Controller的类,解析其中的@GetMapping、@PostMapping等注解,将这些API接口映射到内部的请求路由表中。 - 嵌入式Tomcat实例启动:Spring Boot会根据类路径中的依赖自动选择并启动嵌入式Web服务器(默认是Tomcat),通过
TomcatServletWebServerFactory创建Tomcat实例,绑定配置的端口(默认8080),并将Spring的DispatcherServlet注册到Tomcat中作为核心请求处理器。 - 请求处理流程:当你通过localhost:8080访问API时,嵌入式Tomcat接收到HTTP请求,转发给DispatcherServlet,DispatcherServlet根据路由表找到对应的Controller方法,执行逻辑后返回响应,再由Tomcat把响应发送给客户端。
二、嵌入式Tomcat的定义与和常规Tomcat的区别
什么是嵌入式Tomcat?
嵌入式Tomcat是将Tomcat的核心服务(Servlet容器、HTTP连接器等)打包成可被Java代码调用的jar包,作为应用的依赖存在。它不需要独立安装,而是由应用代码直接启动、配置,完全融入Spring Boot应用的生命周期。
和常规Tomcat的核心差异
- 部署模式:
- 常规Tomcat:是独立安装的服务器软件,需将项目打包为war包,手动放入Tomcat的
webapps目录,再启动Tomcat服务才能运行应用。 - 嵌入式Tomcat:是Spring Boot应用的一部分,随应用启动而启动,项目可打包为可执行jar包,直接通过
java -jar命令运行,无需额外部署步骤。
- 常规Tomcat:是独立安装的服务器软件,需将项目打包为war包,手动放入Tomcat的
- 配置方式:
- 常规Tomcat:依赖
server.xml、web.xml等XML文件配置端口、线程池、虚拟主机等参数。 - 嵌入式Tomcat:优先通过Spring Boot的
application.properties/application.yml配置(比如server.port=8081),也可通过Java代码自定义TomcatServletWebServerFactoryBean来实现更灵活的配置。
- 常规Tomcat:依赖
- 资源隔离:
- 常规Tomcat:一个Tomcat实例可部署多个应用,共享服务器资源,应用之间可能互相影响。
- 嵌入式Tomcat:每个Spring Boot应用拥有独立的Tomcat实例,启动、停止仅影响自身,资源完全隔离。
- 资源占用:
- 常规Tomcat:作为独立服务,启动后会持续占用系统资源,即使没有应用运行。
- 嵌入式Tomcat:仅在Spring Boot应用启动时初始化,应用停止后资源立即释放,更轻量化,适合微服务场景。
内容的提问来源于stack exchange,提问作者mattsmith5
相关产品推荐
相关产品推荐

