[英]Migrating Spring web application to Spring Boot
我有一個Web項目,並且可以輕松地將其分配給tomcat。 實際上,我有一個實現WebApplicationInitializer
的WebAppInitializer
類(該類確實很胖),因為您知道每一個支持Servlet 3.0的應用程序服務器,它都可以輕松地檢測到它並嘗試啟動它。 現在,我想知道是否有可能使用spring boot starter,而無需任何進一步的配置,我將WebAppInitializer
傳遞給它,並基於WebAppInitializer
spring boot引導我的項目嗎?
我只想使用spring-boot的方法在Tomcat上部署應用程序,而又不想使用其他spring-boot的工具。
如果Servlet 3.0+應用程序已經使用了Spring Servlet 3.0+初始化程序支持類,那么它們可能會很容易轉換。 通常,現有WebApplicationInitializer中的所有代碼都可以移入SpringBootServletInitializer中。 如果您現有的應用程序具有多個ApplicationContext(例如,如果它使用AbstractDispatcherServletInitializer),則可以將所有上下文源壓縮到單個SpringApplication中。 您可能遇到的主要並發症是,如果這不起作用,則需要維護上下文層次結構。 有關示例,請參見有關構建層次結構的條目。 通常將需要分解包含特定於Web的功能的現有父上下文,以便所有ServletContextAware組件都位於子上下文中。
所以是的,有可能,但是您需要將其轉換為SpringBootServletInitializer
,這似乎非常相似。
是的,這是一個老問題。 但是我看不到一個可接受的答案,而最接近有效答案的答案只有指向外部資源的鏈接。 就是這樣
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.