簡體   English   中英

將Spring Web應用程序遷移到Spring Boot

[英]Migrating Spring web application to Spring Boot

我有一個Web項目,並且可以輕松地將其分配給tomcat。 實際上,我有一個實現WebApplicationInitializerWebAppInitializer類(該類確實很胖),因為您知道每一個支持Servlet 3.0的應用程序服務器,它都可以輕松地檢測到它並嘗試啟動它。 現在,我想知道是否有可能使用spring boot starter,而無需任何進一步的配置,我將WebAppInitializer傳遞給它,並基於WebAppInitializer spring boot引導我的項目嗎?

我只想使用spring-boot的方法在Tomcat上部署應用程序,而又不想使用其他spring-boot的工具。

Spring Boot docs中

如果Servlet 3.0+應用程序已經使用了Spring Servlet 3.0+初始化程序支持類,那么它們可能會很容易轉換。 通常,現有WebApplicationInitializer中的所有代碼都可以移入SpringBootServletInitializer中。 如果您現有的應用程序具有多個ApplicationContext(例如,如果它使用AbstractDispatcherServletInitializer),則可以將所有上下文源壓縮到單個SpringApplication中。 您可能遇到的主要並發症是,如果這不起作用,則需要維護上下文層次結構。 有關示例,請參見有關構建層次結構的條目。 通常將需要分解包含特定於Web的功能的現有父上下文,以便所有ServletContextAware組件都位於子上下文中。

所以是的,有可能,但是您需要將其轉換為SpringBootServletInitializer ,這似乎非常相似。

是的,這是一個老問題。 但是我看不到一個可接受的答案,而最接近有效答案的答案只有指向外部資源的鏈接。 就是這樣

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-embedded-container-context-initializer

28.4.2 Servlet上下文初始化

嵌入式Servlet容器不會直接執行Servlet 3.0+ javax.servlet.ServletContainerInitializer接口或Spring的org.springframework.web.WebApplicationInitializer接口。 這是一個有意的設計決定,旨在降低旨在在戰爭中運行的第三方庫可能破壞Spring Boot應用程序的風險。

如果您需要在Spring Boot應用程序中執行Servlet上下文初始化,則應該注冊一個實現org.springframework.boot.web.servlet.ServletContextInitializer接口的bean。 單個onStartup方法提供對ServletContext的訪問,並且在必要時可以輕松地用作現有WebApplicationInitializer的適配器。

掃描Servlet,過濾器和偵聽器

使用嵌入式容器時,可以使用@ServletComponentScan啟用自動注冊帶有@ WebServlet,@ WebFilter和@WebListener的類。

[提示] @ServletComponentScan在獨立容器中無效,在該容器中,使用了容器的內置發現機制。

我已經試過了 有用

在我的用例中,我有一個包含數十個webapp的項目,這些webapp旨在作為WAR在Tomcat上運行。 WebApplicationInitializers巧妙地制作了許多邏輯,似乎應該有一種更簡單的方法來重用所有這些邏輯。 implements ServletContextInitializer添加到這些初始化器中,然后通過@Configuration類將它們作為bean公開,從而使我的Web服務器與SpringBoot的嵌入式Tomcat保持一致。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM