一、配置嵌入式Servlet容器

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章