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在啓動時就會加載到單例池中,通過啓動日誌可以看到確實修改了默認的端口