如何从传统的Java Web应用程序(使用web.xml)迁移到spring boot?

mfk*_*son 7 spring web.xml vaadin spring-boot

我想把我的项目转换为基于弹簧的产品.

我的第一步是将我的java Web应用程序从生成的WAR文件转换为由spring boot启动的独立可执行jar.

让我们从github:Vaadin-Spring Web应用程序中获取一个开源Web应用程序示例

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

可以在此处找到根上下文文件.

我希望有一些指导我进行转型.

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

Dav*_*yer 13

据我所知,这个应用程序不是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);
        }
Run Code Online (Sandbox Code Playgroud)

然后添加一些配置:

  • A @Bean类型ServletServletRegistrationBean将bean安装在容器中,就像它是a <servlet/><servlet-mapping/>in一样web.xml

  • A @Bean类型FilterFilterRegistrationBean行为类似(如a <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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

无论如何,我将有一个bash转换这个特定的应用程序(源代码罐子会很好),并更新此响应,如果我学到新的东西.