SpringBoot——嵌入式Servlet容器
1、SpringBoot内置Web服务器的启动原理
1、ServletWebServerFactoryAutoConfiguration
SpringBoot应用启动发现是Web应用。Web场景包导入tomcat
Web应用会创建一个Web版的ioc容器ServletWebServerApplicationContex
它通过搜索单个ServletWebServerFactorybean(Servlet的web服务器工厂,它产生Serlvet的web服务器)来引导自身。
web服务器工厂包括:TomcatServletWebServerFactory、JettyServletWebServerFactory或UnderTowletWebServerFactory。
底层直接有一个自动配置类:ServletWebServerFactoryAutoConfiguration。这个配置类还前置导入了上述三个工厂的自动配置类,如下
2、特定Web服务器的Servsr工厂类
@Import({ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class, EmbeddedTomcat.class,
EmbeddedJetty.class,
EmbeddedUndertow.class})
public class ServletWebServerFactoryAutoConfiguration {
public ServletWebServerFactoryAutoConfiguration() {
}
undertowServletWebServerFactory:
JettyServletWebServerFactory :
tomcatServletWebServerFactory:
当然这三个工厂的创建是有条件的
tomcat:
项目导了tomcat的依赖,容器中就放一个tomcat的服务器创建工厂(默认web-starter导tomcat的依赖)
同理,
Undertow服务器
jetty服务器:
例:启动tomcat内嵌服务器
内嵌服务器,就是手动吧启动服务器的代码调用(tomcat核心jar包),如下
2、修改默认配置
1、切换服务器
spring-boot-starter-tomcat是spring-boot-starter-web的子依赖。需要将spring-boot-starter-tomca排除,换上需要的服务器依赖,如下:
2、 修改服务器默认的配置
所以,yml文件中这样改:
serverProperties一览:
3、直接自定义
原理:
Web应用会创建一个Web版的ioc容器ServletWebServerApplicationContex,它通过搜索单个ServletWebServerFactorybean(Servlet的web服务器工厂,它产生Serlvet的web服务器)来引导自身。
所以,
自定义ConfigurableServletWebServerFactory
