Spring Boot 内置了 Tomcat 启动的原理
Spring Boot的一个核心理念是简化应用的创建和部署。为了达到这一目标,Spring Boot内置了一个嵌入式的Servlet容器(默认是Tomcat)来简化部署流程。这意味着开发者可以创建一个“可执行的”JAR或WAR文件,不需要外部的Servlet容器就可以运行Web应用。下面是这个原理的详细解释:
依赖管理:
在Spring Boot的starter POMs中,包含了Tomcat的嵌入式依赖。当你加入
spring-boot-starter-web
依赖时,默认也加入了Tomcat。xmlCopy code
<dependency> <groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency>
自动配置:
Spring Boot的自动配置特性会检查类路径上的依赖,并自动配置应用。在
spring-boot-autoconfigure
的jar包中,有一个TomcatAutoConfiguration
类,当Spring Boot检测到类路径上有Tomcat的相关依赖并且没有其他的Servlet容器配置时,这个配置类会被自动应用。创建与启动内嵌的Tomcat:
Spring Boot的
SpringApplication
类会自动创建和启动内嵌的Tomcat实例。在背后,TomcatAutoConfiguration
会创建一个TomcatServletWebServerFactory
,它负责配置、创建和启动Tomcat。代码例子:
javaCopy code
// SpringApplication会执行以下操作 WebServer webServer =webServerFactory.getWebServer(webApplication); webServer.start();
部署应用到内嵌的Tomcat:
Spring Boot应用的Servlet上下文会被自动部署到内嵌的Tomcat上。
“可执行的”JAR/WAR:
通过Spring Boot Maven插件或Gradle插件,你可以创建一个“可执行的”JAR或WAR文件。这意味着JAR/WAR文件包含了所有的依赖,包括Tomcat,所以你只需要一个命令就可以运行你的Web应用。
bashCopy code
java -jar myapp.jar
在上面的命令中,Java的JAR文件加载器会读取在
META-INF/MANIFEST.MF
中的指示,并启动嵌入的Tomcat和Spring Boot应用。
综上所述,通过内置Tomcat,Spring Boot简化了Web应用的开发和部署。开发者不再需要手动下载、安装、配置外部的Servlet容器,也不需要为部署而烦恼。这大大加速了从开发到生产的过程。