SpringBoot默认使用Tomcat作为嵌入式的Servlet容器
(一)配置文件修改Servlet属性
如何定制和修改Servlet容器的相关配置
org.springframework.boot.autoconfigure.web.ServerProperties
相关的配置都可以通过上面这个类进行设置,比如开发中常使用的server.port
public class ServerProperties {
private Integer port;
private InetAddress address;
private Duration connectionTimeout;
private String contextPath;
}
上面简单的列举了几个属性,包括端口、地址、超时时间、项目路径等等,具体的参考类完整属性.
其中在该类中包含了几个容器的属性,
private final ServerProperties.Servlet servlet = new ServerProperties.Servlet();
private final ServerProperties.Tomcat tomcat = new ServerProperties.Tomcat();
private final ServerProperties.Jetty jetty = new ServerProperties.Jetty();
private final ServerProperties.Undertow undertow = new ServerProperties.Undertow();
每个属性在该ServerProperties对应的有静态的内部类代码,如果想了解每个容器的默认配置可以去该类中细读
上面给出的属性是通用的servlet相关属性,如果想要设置某个容器的属性可以参考如下设置:
比如说修改tomcat中的某一个属性,可以在配置文件中按照这样的配置
server.tomcat.XXX (具体的属性名参考
org.springframework.boot.autoconfigure.web.ServerProperties.Tomcat
(二)非配置文件修改Servlet属性
上面我们是通过配置文件的方式来修改某些默认的配置,除了该种方式外,我们还可以自定义Bean来修改默认属性,即编写一个嵌入式servlet容器的定制器
在SpringBoot 1.X版本使用的是下面的这个类
org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer
SprigBoot2.X版本没有这个类了,使用的2.X版本,请参考如下:
@Configuration
public class MyServlet {
@Bean
public WebServerFactoryCustomizer myWebServerFactoryCustomizer() {
return new WebServerFactoryCustomizer<ConfigurableWebServerFactory>() {
@Override
public void customize(ConfigurableWebServerFactory factory) {
factory.setPort(8081);
}
};
}
}
上述代码使用的是WebServerFactoryCustomizer类,通过实现该接口返回一个实例对象这就是我们自定义的Servlet配置
其中参数ConfigurableWebServerFactory 是可以更换的,默认是WebServerFactory,这里选择它的一个子类来扩展功能,因为WebServerFactory是一个空接口.该父接口下有很多不同类型的接口配置,具体选择自行判断.
上述配置完成后,该Bean在启动时就会加载到单例池中,通过启动日志可以看到确实修改了默认的端口