gpt4 book ai didi

java - 如何为 Spring Boot 2 创建自定义嵌入式 servlet 容器

转载 作者:行者123 更新时间:2023-12-02 00:48:08 26 4
gpt4 key购买 nike

我正在尝试为 SpringBoot 2 创建自定义嵌入式 servlet 容器。我已经创建了 ServletWebServerFactoryWebServer 接口(interface)的实现。在我的应用程序中,我明确从 spring-boot-starter-web 中排除嵌入式 Tomcat,然后手动将自定义工厂类提供给 SpringApplication 构造函数。当调用我的 WebServer 实现的 start() 方法时,我将我的 ServletContext 提供给所有 ServletContextInitializer传递给工厂的 getWebServer 方法。

当我调用 SpringApplicationrun() 方法时,我可以看到 Spring 加载我的工厂并正确抓取我的 WebServer 对象。但是,启动失败并出现以下错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'resourceHandlerMapping' defined in class path resource [org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.HandlerMapping]: Factory method 'resourceHandlerMapping' threw exception; nested exception is java.lang.IllegalStateException: No ServletContext set

我错过了什么?我应该将 ServletContext 传递到其他地方吗?

最佳答案

当将 ServletContextInitializer 传递给 getWebServer() 时,我设法通过调用 ServletContextInitializeronStartup(ServletContext) 方法解决了该问题> 我的 ServletWebServerFactory 方法传入我的自定义、已初始化的 ServletContext - 无需等待 上调用 start() 方法WebServer 实现。虽然这解决了我的问题,但我不知道这样做是否正确,但我仍然想听听 SpringBoot 专家的意见。

关于java - 如何为 Spring Boot 2 创建自定义嵌入式 servlet 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57881826/

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