Spring Boot 2中的容器配置

2023/05/11

1. 概述

在这个快速教程中,我们将了解如何在Spring Boot 2中替换EmbeddedServletContainerCustomizer和ConfigurableEmbeddedServletContainer。

这些类是Spring Boot早期版本的一部分,但从Spring Boot 2开始已被删除。当然,这些功能仍然可以通过接口WebServerFactoryCustomizer和类ConfigurableServletWebServerFactory获得

让我们来看看如何使用它们。

2. Spring Boot 2之前

首先,让我们看一下使用旧类和接口的配置,我们需要替换它们:

@Component
public class CustomContainer implements EmbeddedServletContainerCustomizer {

    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {
        container.setPort(8080);
        container.setContextPath("");
    }
}

在这里,我们自定义了Servlet容器的端口和上下文路径。

实现这一点的另一种可能性是使用ConfigurableEmbeddedServletContainer的更具体的子类,用于容器类型,例如Tomcat:

@Component
public class CustomContainer implements EmbeddedServletContainerCustomizer {

    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {
        if (container instanceof TomcatEmbeddedServletContainerFactory) {
            TomcatEmbeddedServletContainerFactory tomcatContainer = (TomcatEmbeddedServletContainerFactory) container;
            tomcatContainer.setPort(8080);
            tomcatContainer.setContextPath("");
        }
    }
}

3. Spring Boot 2

在Spring Boot 2中,EmbeddedServletContainerCustomizer接口被WebServerFactoryCustomizer取代,而ConfigurableEmbeddedServletContainer类被ConfigurableServletWebServerFactory取代

让我们为Spring Boot 2项目重写前面的示例:

public class CustomContainer implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {

    public void customize(ConfigurableServletWebServerFactory factory) {
        factory.setPort(8080);
        factory.setContextPath("");
    }
}

第二个示例现在将使用TomcatServletWebServerFactory:

@Component
public class CustomContainer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {

    @Override
    public void customize(TomcatServletWebServerFactory factory) {
        factory.setContextPath("");
        factory.setPort(8080);
    }
}

同样,我们将JettyServletWebServerFactory和UndertowServletWebServerFactory作为已删除的JettyEmbeddedServletContainerFactory和UndertowEmbeddedServletContainerFactory的等价物。

4. 总结

这篇简短的文章展示了如何解决我们在将Spring Boot应用程序升级到版本2.x时可能遇到的问题。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章