我有一个web项目,我很容易在tomcat上解开它。事实上,我有一个实现WebApplicationInitializer的WebAppInitializer类(这个类真的很胖),因为您知道每个支持Servlet3.0的应用程序服务器都可以很容易地检测到它并尝试引导它。现在我想知道有没有可能使用spring boot starter,并且没有任何进一步的配置,我将我的WebAppInitializer传递给它,spring boot基于我的WebAppInitializer boot我的项目?
我只想使用spring-boot的方法在Tomcat上部署应用程序,我不想使用其他spring-boot的工具。
发布于 2018-10-25 13:55:39
是的,这是一个老问题。但我没有看到一个被接受的答案,最接近工作答案的答案只有一个到外部资源的链接。所以就是这样了。
28.4.2 Servlet上下文初始化
嵌入式servlet容器不直接执行Servlet Spring接口或3.0+的org.springframework.web.WebApplicationInitializer接口。这是一个有意的设计决策,旨在降低设计用于在war中运行的第三方库可能会破坏Spring Boot应用程序的风险。
如果需要在Spring Boot应用程序中执行servlet上下文初始化,则应该注册实现org.springframework.boot.web.servlet.ServletContextInitializer接口的bean。单个onStartup方法提供对ServletContext的访问,如果需要,可以很容易地将其用作现有WebApplicationInitializer的适配器。
扫描Servlets、过滤器和监听程序
当使用嵌入式容器时,可以使用@ServletComponentScan启用使用@WebServlet、@WebFilter和@WebListener注释的类的自动注册。
Tip @ServletComponentScan在使用容器的内置发现机制的独立容器中不起作用。
我试过了。它起作用了
在我的用例中,我有一个包含几十个few应用程序的项目,旨在作为WAR在Tomcat上运行。许多逻辑都被巧妙地写进了WebApplicationInitializers中,似乎应该有一种更容易的方法来重用所有这些逻辑。将implements ServletContextInitializer添加到这些初始化器中,并通过@Configuration类将它们公开为beans,使用SpringBoot的嵌入式Tomcat点亮了我的with服务器。
发布于 2016-02-16 16:55:32
如果
Servlet 3.0+应用程序已经使用了Spring Servlet 3.0+初始化器支持类,那么它们可以非常容易地进行转换。通常,现有WebApplicationInitializer中的所有代码都可以移动到SpringBootServletInitializer中。如果您现有的应用程序有多个ApplicationContext (例如,如果它使用AbstractDispatcherServletInitializer),那么您可以将所有上下文源压缩到一个SpringApplication中。你可能会遇到的主要复杂情况是,如果这不起作用,你需要维护上下文层次结构。有关示例,请参阅有关构建层次结构的条目。包含web特定功能的现有父上下文通常需要拆分,以便所有ServletContextAware组件都在子上下文中。
是的,这是可能的,但您需要将其转换为SpringBootServletInitializer,这看起来非常相似。
发布于 2016-02-16 20:49:37
http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-create-a-deployable-war-file准确地描述了如何做到这一点
https://stackoverflow.com/questions/35427841
复制相似问题