如何从传统的java web应用程序(带有web.xml)迁移到spring boot?

2024-05-07

我想将我的项目切换到基于弹簧的产品。

我的第一步是将我的 java web 应用程序从生成的 WAR 文件转换为由 spring boot 提供支持的独立可执行 jar。

让我们从 github 中获取一个开源 Web 应用程序示例:Vaadin-Spring Web Application https://github.com/xpoft/vaadin-samples/blob/master/spring-integration

web.xml 文件可以在此处找到。 https://github.com/xpoft/vaadin-samples/blob/master/spring-integration/src/main/webapp/WEB-INF/web.xml

可以在此处找到根上下文文件。 https://github.com/xpoft/vaadin-samples/blob/master/spring-integration/src/main/webapp/WEB-INF/root-context.xml

我希望有一些指导可以帮助我进行转型。

我还在 spring-boot 项目中提交了一个问题。 https://github.com/spring-projects/spring-boot/issues/137


据我所知,这个应用程序不是 Spring MVC 应用程序 - 如果是的话,迁移可能会容易得多。目标(根据 github 问题)是获取可执行 JAR。不过,基本计划可能是首先使用 Spring Boot 迁移到 WAR,然后在运行后迁移到 JAR。这是一个非常简单的应用程序,所以我们真正需要做的就是查看web.xml并将其转化为相关的 Spring Boot 功能。以下是一些一般指南:

通过扩展创建可部署的 WARSpringBootServletInitializer(例如,在一个名为Application),并添加 Spring Boot@EnableAutoConfiguration注解。例子:

    @Configuration
    @EnableAutoConfiguration
    @ComponentScan
    public class Application extends SpringBootServletInitializer {

        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(Application.class);
        }

然后添加一些配置:

  • A @Bean类型的Servlet or ServletRegistrationBean将该 bean 安装在容器中,就像它是一个<servlet/> and <servlet-mapping/> in web.xml

  • A @Bean类型的Filter or FilterRegistrationBean行为类似(就像<filter/> and <filter-mapping/>).

  • The ApplicationContext在本例中,它植根于 XML 文件,因此最简单的第一步是@Import那进入春天Application。这个非常简单,只需几行即可重新创建:@Bean定义。

  • 静态资源可以移动到/public (or /static or /resources or /META-INFO/resources) 在类路径根目录中

一旦 WAR 运行,我们通过添加一个使其可执行main方法到我们的Application, e.g.

public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
}

另请参阅将 JAR 转换为 WAR 的入门指南 http://spring.io/guides/gs/convert-jar-to-war/.

正如我所说,这个特定应用程序的最大问题是它不是 Spring MVC 应用程序。正如爱尔兰人可能会说的那样:“先生,如果我想到达那里,我就不会从这里开始。”一般来说,这是一个有趣的问题,但我建议其他想要将 Spring 应用程序迁移到 Spring Boot 的人阅读此处的一般建议,但也许可以在其他地方开始另一个讨论。

不管怎样,我会在转换这个特定的应用程序时大吃一惊(源代码罐子会很好),如果我学到任何新东西,我会更新这个响应。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从传统的java web应用程序(带有web.xml)迁移到spring boot? 的相关文章

随机推荐

  • 我们可以在比赛中重用后卫内部的中间变量吗?

    说我有方法foo as def foo i Int Option Int some code 现在我想在一个Seq of Int如下 Seq 1 2 map case int gt foo int collect case Some int
  • Weblogic:Java 8 迁移后 AppMerge 无法合并您的应用程序

    我们正在将 Java EE 应用程序从Java 6 to Java 8 这意味着编译级别和迁移JRE6 上的 Weblogic 11g to JRE8 上的 Weblogic 12c 当我尝试部署项目时 出现以下错误 lt 20 7 201
  • 使用 python 解析大型(20GB)文本文件 - 将 2 行读为 1

    我正在解析一个 20Gb 文件并将满足特定条件的行输出到另一个文件 但是有时 python 会一次读取 2 行并将它们连接起来 inputFileHandle open inputFileName r row 0 for line in i
  • 如何使用 .schema 文件在 sqlite3 中创建 DB 文件

    我们的客户向我们提供了一个名为db schema 现在有一个命令可以用来运行这个文件来创建一个 dbsqlite3 中的文件 我可以做到这一点而不必输入中提到的所有查询吗db schema file 请帮忙 谢谢 如果该文件仅包含格式正确的
  • 0、-0 和 +0 之间的差异[重复]

    这个问题在这里已经有答案了 我一直不明白为什么 0分别对待0 有趣的事实是0等于 0 gt 0 0 true 那么问题来了 为什么 0 分别对待 https stackoverflow com a 23368135 1420197 than
  • 根据聚合创建大小均匀的组

    可能是一个新手问题 但我希望根据数据库总大小将我们的服务器库存分成几个大小均匀的组 并且很难弄清楚如何对它们进行分组 我认为 NTILE 可能会起作用 但我就是无法将注意力集中在平均分配组上 我下面的示例只是随机订购服务器 我希望结果是大小
  • 在提供给 sklearn 管道中的分类器之前获取所选特征的名称和数量

    我在用sel SelectFromModel ExtraTreesClassifier 10 threshold mean 选择我的数据集中最重要的特征 然后我想将这些选定的特征提供给我的 keras 分类器 但是我的基于 keras 的神
  • 替换 Select 语句中的 NULL 和空字符串

    我有一个专栏可以有NULL或空白区域 即 值 我想用有效值替换这两个值 例如 UNKNOWN 我发现的各种解决方案建议修改表本身内的值 然而 在这种情况下 这不是一个选项 因为数据库用于开发和 或修补得非常差的第三方应用程序 实际上 我认为
  • R 中的 Tabulizer 包:如何在特定标题后抓取表格

    如何从 PDF 中抓取一些标题文本前面的表格 我正在尝试 tabulizer 包 这是从特定页面获取表格的示例 波兰语 公共卫生需求地图 library tabulizer library tidyverse options java pa
  • 添加 TableRowSorter 将值添加到模型后会导致 java.lang.IndexOutOfBoundsException:无效范围

    将 TableRowSorter 添加到表及其相应模型后 任何相应的添加 专门在 firetabletablerowsinserted 处 都会导致异常 从测试中可以清楚地看出 GetRowCount 返回的值超出了模型范围 但是 在添加排
  • 使用 Jackson 和 Spring 序列化 Joda DateTime

    我在使用 Spring Boot 和 Jackson databind 2 5 2 将 Joda DateTime 从 java 序列化和反序列化为 json 并再次返回时遇到问题 我的 pom xml 看起来像这样
  • 批处理:在特定程序中打开特定文件?

    当记事本是 txt 文件的默认程序时 如何告诉 Windows 在写字板中打开 C test test txt 接受的答案对我不起作用 我不确定这是因为我试图运行的程序 还是因为路径中有空格 即使我用引号引起来 或者其他原因 不管怎样 我可
  • 不构建自己的错误跟踪系统的原因[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 现在我已经多次遇到一个团队的计划 他们想要构建自己的错误跟踪系统 不是作为产品 而是作为内部工具 我听到的赞成的论点通常是这样的 想要通过一些内部构建
  • 无法在 JavaCC 中加载主类

    我是人工智能学生 我们使用 JavaCC 我是新来的 我正在尝试简单的例子 但出现了一些错误 1 我从它的网站下载了JavaCC 0 6 2 我把它解压到C盘 3 我将此代码写入扩展名为 jj 的文件中 PARSE BEGIN Test i
  • 向 Java 类添加编程注释

    使用示例 我想在类字段上添加一个自定义注释 MyContainer 然后在所有此类字段上自动添加相关的 Hibernate 注释 取决于字段类型和属性 另外 我需要向类添加 JAXB XmlType 注释 并使类型名称基于类名称 我还想根据
  • Android 上的透明视频

    有什么办法让Android播放带有透明区域的视频吗 当我尝试在 VideoView 中播放包含透明区域的 WebM 视频时 视图的背景保持黑色 我希望看到透明区域上显示的父视图的背景 而不是黑色 到目前为止 我发现的唯一可行的解 决方案是从
  • C# 多线程 - 在线程之间移动对象

    我正在使用一个 winforms 控件 它既是一个 GUI 元素 又执行一些尚未向开发人员公开的内部处理 当这个组件被实例化时 可能需要 5 到 15 秒的时间才能准备好 所以我想做的就是将它放在另一个线程上 完成后将其带回 gui 线程并
  • 反应本机导航抽屉:按下覆盖层时抽屉不会关闭

    我尝试过很多建议https github com react navigation react navigation issues 5370 https github com react navigation react navigatio
  • 推送通知 Drupal 模块 - 删除设备(Web 服务)

    我已经开始使用这个模块 并且我已经成功注册设备 按照他的作者发布的说明进行操作 here http www danielhanold com story drupal 7 push notifications how to register
  • 如何从传统的java web应用程序(带有web.xml)迁移到spring boot?

    我想将我的项目切换到基于弹簧的产品 我的第一步是将我的 java web 应用程序从生成的 WAR 文件转换为由 spring boot 提供支持的独立可执行 jar 让我们从 github 中获取一个开源 Web 应用程序示例 Vaadi