gpt4 book ai didi

tomcat - 如何将 TomcatEmbeddedServletContainerFactory 与 AbstractAnnotationConfigDispatcherServletInitializer 一起使用

转载 作者:行者123 更新时间:2023-11-28 22:00:08 24 4
gpt4 key购买 nike

我从 Spring Boot 项目中找到了“TomcatEmbeddedServletContainerFactory”,它可以创建一个 Tomcat 嵌入式实例。我已经有一组“传统的”Spring(基于 Java)配置类加上一个用于设置根应用程序上下文和 Controller 上下文的“AbstractAnnotationConfigDispatcherServletInitializer”实现

public class IntegrationTestDispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}

@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{ServiceModuleConfiguration.class};
}

@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{WebModuleConfiguration.class };
}
}

现在我尝试创建一个 Tomcat 实例

TomcatEmbeddedServletContainerFactory tomcatFactory = new TomcatEmbeddedServletContainerFactory("/", 8080);
tomcatFactory.getEmbeddedServletContainer(???)

getEmbeddedServletContainer() 期望来自 Spring boot 的 ServletContextInitializer,现在我不得不将其桥接到我的配置类。

Spring Boot 的 tomcat 工厂是为支持这个而构建的吗?如果是这样,有什么例子吗?

最佳答案

EmbeddedServletContainerFactory 确实与 EmbeddedWebApplicationContext 配对(不是您从 AbstractAnnotationConfigDispatcherServletInitializer 获得的 AnnotationConfigWebApplicationContext)。如果你想构建一个 WAR 文件,那么考虑到初始化器的简单性质,你最好的选择是使用 SpringApplicationServletInitializer 代替,例如

public class IntegrationTestDispatcherServletInitializer extends SpringBootServletInitializer {

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(ServiceModuleConfiguration.class).child(WebModuleConfiguration.class);
}

}

如果您不想要 WAR 文件(正如评论中所建议的,当我考虑更多时)只需创建一个 SpringApplication,如果它使用 EmbeddedServletContainerFactory认为您正在尝试构建一个网络应用程序(或使用上述代码中的构建器)。

关于tomcat - 如何将 TomcatEmbeddedServletContainerFactory 与 AbstractAnnotationConfigDispatcherServletInitializer 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21732556/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com