Servlet容器:管理、运行Servlet组件(Servlet、Filter、Listener)的环境,一般指服务器
1. 自动配置原理
- SpringBoot 默认嵌入Tomcat作为Servlet容器。
- 自动配置类是
ServletWebServerFactoryAutoConfiguration,EmbeddedWebServerFactoryCustomizerAutoConfiguration- 自动配置类开始分析功能。
xxxxAutoConfiguration
@AutoConfiguration
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE)
@ConditionalOnClass(ServletRequest.class)
@ConditionalOnWebApplication(type = Type.SERVLET)
@EnableConfigurationProperties(ServerProperties.class)
@Import({ ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class,
ServletWebServerFactoryConfiguration.EmbeddedTomcat.class,
ServletWebServerFactoryConfiguration.EmbeddedJetty.class,
ServletWebServerFactoryConfiguration.EmbeddedUndertow.class })
public class ServletWebServerFactoryAutoConfiguration {
}
ServletWebServerFactoryAutoConfiguration自动配置了嵌入式容器场景- 绑定了
ServerProperties配置类,所有和服务器有关的配置server ServletWebServerFactoryAutoConfiguration导入了 嵌入式的三大服务器Tomcat、Jetty、Undertow- 导入
Tomcat、Jetty、Undertow都有条件注解。系统中有这个类才行(也就是导了包) - 默认
Tomcat配置生效。给容器中放 TomcatServletWebServerFactory - 都给容器中
ServletWebServerFactory放了一个** web服务器工厂(造web服务器的)** - web服务器工厂 都有一个功能,
getWebServer获取web服务器 - TomcatServletWebServerFactory 创建了 tomcat。
- 导入
- ServletWebServerFactory 什么时候会创建 webServer出来。
ServletWebServerApplicationContextioc容器,启动的时候会调用创建web服务器- Spring**容器刷新(启动)**的时候,会预留一个时机,刷新子容器。
onRefresh() - refresh() 容器刷新 十二大步的刷新子容器会调用
onRefresh();
@Override
protected void onRefresh() {
super.onRefresh();
try {
createWebServer();
}
catch (Throwable ex) {
throw new ApplicationContextException("Unable to start web server", ex);
}
}
Web场景的Spring容器启动,在onRefresh的时候,会调用创建web服务器的方法。
Web服务器的创建是通过WebServerFactory搞定的。容器中又会根据导了什么包条件注解,启动相关的 服务器配置,默认EmbeddedTomcat会给容器中放一个TomcatServletWebServerFactory,导致项目启动,自动创建出Tomcat。
2. 自定义

切换服务器;
<properties>
<servlet-api.version>3.1.0</servlet-api.version>
</properties>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- Exclude the Tomcat dependency -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Use Jetty instead -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
3. 最佳实践
用法:
- 修改
server下的相关配置就可以修改服务器参数 - 通过给容器中放一个
ServletWebServerFactory,来禁用掉SpringBoot默认放的服务器工厂,实现自定义嵌入任意服务器。

本文详细阐述了SpringBoot如何通过自动配置原理默认嵌入Tomcat,介绍了自定义服务器的步骤,以及如何通过排除默认依赖并引入其他如Jetty来实现服务器替换的实践方法。

2889

被折叠的 条评论
为什么被折叠?



