当前位置: 首页 > 知识库问答 >
问题:

将Spring Web应用程序迁移到Spring Boot

邓嘉致
2023-03-14

我有一个Web项目,我很容易在tomcat上对其进行depoly。事实上,我有一个实现WebApplication ationLaunalizerWebAppLaunalizer类(这个类真的很胖),因为你知道每个支持servlet 3.0的应用程序服务器,它可以很容易地检测到它并尝试启动它。现在我想知道是否可以使用Spring启动启动器,并且无需任何进一步的配置,我将我的WebAppLaunalizer传递给它,并根据我的WebAppLaunalizer启动我的项目进行Spring启动?

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

共有3个答案

甘英光
2023-03-14

来自Spring Boot文档:

如果Servlet 3.0应用程序已经使用了Spring Servlet 3.0初始值设定项支持类,那么它们可能很容易翻译。通常,可以将现有WebApplicationInitializer中的所有代码移动到SpringBootServletInitializer中。如果您现有的应用程序有多个ApplicationContext(例如,如果它使用AbstractDispatcherServletInitializer),那么您可能能够将所有上下文源压缩到一个SpringApplication中。您可能会遇到的主要复杂情况是,如果这样做不起作用,您需要维护上下文层次结构。有关示例,请参见关于构建层次结构的条目。通常需要分解包含web特定功能的现有父上下文,以便所有ServletContextAware组件都位于子上下文中。

是的,这是可能的,但您需要将其转换为SpringBootServletInitializer,这似乎非常相似。

冯星剑
2023-03-14

http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-create-a-deployable-war-file精确地描述了如何去做

秦俊豪
2023-03-14

是的,这是个老问题。但我没有看到一个公认的答案,而最接近工作的答案只有一个指向外部资源的链接。就是这样。

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

28.4.2 Servlet上下文初始化

嵌入式servlet容器不直接执行Servlet 3.0javax.servlet.ServletContainerLaunalizer接口或Spring的org.springframework.web.WebApplication ationLaunalizer接口。这是一个有意的设计决策,旨在降低设计为在战争中运行的第三方库可能破坏Spring Boot应用程序的风险。

如果需要在Spring Boot应用程序中执行servlet上下文初始化,那么应该注册一个实现org的bean。springframework。靴子网状物servlet。ServletContextInitializer接口。单一onStartup方法提供对ServletContext的访问,如果需要,可以轻松地用作现有WebApplicationInitializer的适配器。

扫描Servlet、过滤器和侦听器

使用嵌入式容器时,可以使用@ServletComponentScan启用用@WebServlet、@WebFilter和@WebListener注释的类的自动注册。

[提示]@ServletComponentScan在独立容器中没有作用,而是使用容器的内置发现机制。

我试过了很有效

在我的用例中,我有一个包含几十个webapp的项目,设计用于在Tomcat上作为WAR运行。WebApplicationInitializers中巧妙地构建了许多逻辑,似乎应该有一种更简单的方法来重用所有这些。向这些初始值设定项添加ServletContextInitializer,并通过配置类将其公开为bean,这为我的Web服务器带来了SpringBoot嵌入的Tomcat。

 类似资料:
  • 我正在探索将java web应用程序移动到Azure应用程序服务的可能性。应用程序on prem在启动时读取属性文件。 是否有可能将属性文件传递或放置到应用服务?如果没有,建议将此类遗留应用程序移动到Azure应用服务?

  • 我用xcode11运行我的应用程序,并且可以发布它。但是,我看到了苹果发布的下面这则公告; “从2021年4月开始,所有提交到应用商店的iOS和iPadOS应用都必须使用Xcode 12和iOS 14 SDK构建。” 我到底该怎么做?如果我下载Xcode12并运行我的应用程序,SDK会自动更新吗?安装iOS 14 SDK该怎么做? 或者我需要为我现有的豆荚“豆荚更新”吗?在我的项目“iOS部署目标

  • 一个Seam war应用程序(JSF1.2),以前迁移到JBoss7.1并运行良好,现在需要迁移到Wildfly Beta1。 默认情况下Wildfly不支持JSF1.2,因此遵循以下说明启用它: 项目建设得很好,野蝇启动得也很好。当我尝试打开一个页面时,它会抛出异常: 根据这个链接,javax.faces.context.facescontext.getAttributes()的返回类型参数发生

  • 目前,我正在努力将我的seam jbpm应用程序从Jboss 5.1迁移到WildFly 8.2 我使用的是Seam 2.2和JBPM 3.3,在WildFly 8.2上部署了jboss 5.1应用程序。在java 8上编译后,修复了一些问题,我被JBPM问题阻止。 下面是我的服务器日志 如果有人有解决办法,请告诉我。

  • 我试图用以下xml文件在tomcat 8中部署一个应用程序: 我读了很多关于资源方法的迁移,并将xml文件更改为: 该应用程序启动正常,但没有从jar文件中导入类。我肯定我错过了一些东西,找不到一个好的例子来说明如何做到这一点。请帮助。 我的JSP无法编译,正在抛出 组织。阿帕奇。贾斯珀。JaspereException:无法为JSP编译类:在生成的java文件:[/usr/local/apach

  • 我正在将flutter应用程序从Firebase实时数据库迁移到Firestore。我在聊天应用程序中更新这段代码时遇到麻烦,因为firestore没有FireBaseAnimatedList。 旧代码: 现在只有错误是在动画中。我有错误: