spring boot嵌入式servlet容器的问题
今天学到spring boot嵌入式servlet容器的时候发现 EmbeddedServletContainerCustomizer不可用,随后度娘找发现在Spring Boot2.0以上配置嵌入式Servlet容器时EmbeddedServletContainerCustomizer类不存在,而且已经被WebServerFactoryCustomizer替代。
这是原本的EmbeddedServletContainerCustomizer代码,以设置自定义端口号为例:
@Bean
public EmbeddedServletContainerCustomizer embeddedServletContainerCustomizer(){
return new EmbeddedServletContainerCustomizer() {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
container.setPort(8083);
}
};
}
被WebServerFactoryCustomizer替代后的代码:
@Bean
public WebServerFactoryCustomizer<ConfigurableWebServerFactory> webServerFactoryCustomizer(){
return new WebServerFactoryCustomizer<ConfigurableWebServerFactory>(){
@Override
public void customize(ConfigurableWebServerFactory factory) {
factory.setPort(8088);
}
};
}
这是 WebServerFactoryCustomizer的源码,继承WebServerFactory接口指定ConfigurableWebServerFactory泛型
package org.springframework.boot.web.server;
@FunctionalInterface
public interface WebServerFactoryCustomizer<T extends WebServerFactory> {
void customize(T factory);
}
这是ConfigurableWebServerFactory的源码,继承了WebServerFactory和ErrorPageRegistry接口
public interface ConfigurableWebServerFactory extends WebServerFactory, ErrorPageRegistry {
void setPort(int port);
void setAddress(InetAddress address);
void setErrorPages(Set<? extends ErrorPage> errorPages);
void setSsl(Ssl ssl);
void setSslStoreProvider(SslStoreProvider sslStoreProvider);
void setHttp2(Http2 http2);
void setCompression(Compression compression);
void setServerHeader(String serverHeader);
在WebServerFactoryCustomizer接口中使用ConfigurableWebServerFactory对象实现对customize()方法的转换,从而实现对嵌入式servlet容器的配置。
感谢原文给予的支持。原文链接:https://segmentfault.com/a/1190000014610478 。
侵删