一尘不染

如何从传统的Java Web应用程序(带有web.xml)迁移到Spring Boot?

spring-boot

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

我的第一步是将Java Web应用程序从生成的WAR文件转换为由Spring Boot驱动的独立可执行jar。

让我们来看一个来自github的开源Web应用程序示例:Vaadin-Spring Web
Application

可以在此处找到web.xml文件。

根上下文文件可以在这里找到。

我希望有一些指导让我执行转换。

我还在spring-boot项目中提交了一个问题。


阅读 753

收藏
2020-05-30

共1个答案

一尘不染

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

通过扩展SpringBootServletInitializer(例如,在名为的类中Application)创建可部署的WAR ,并添加Spring
Boot @EnableAutoConfiguration批注。例:

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

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

然后添加一些配置:

  • @Bean类型为A ServletServletRegistrationBean将那个bean安装在容器中,就像它是<servlet/>and <servlet-mapping/>inweb.xml

  • @Bean型的FilterFilterRegistrationBean表现得类似(如<filter/><filter-mapping/>)。

  • ApplicationContext这种情况下根植于一个XML文件,所以最简单的第一步是@Import该到了Spring Application。这一步骤非常简单,可以在几行中将其重新@Bean定义。

  • 可以将静态资源移至类路径根目录中/public(或/static/resources/META-INFO/resources

一旦WAR工作了,我们可以通过添加一个main方法使其成为可执行文件Application,例如

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

另请参阅有关将JAR转换为WAR的入门指南

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

无论如何,我会在转换此特定应用程序时大吃一惊(源代码罐会很好),如果我学到新知识,就会更新此响应。

2020-05-30