10

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

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

让我们从 github 上拿一个开源的 Web 应用示例:Vaadin-Spring Web Application

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

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

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

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

4

1 回答 1

14

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

SpringBootServletInitializer通过扩展(例如在名为 的类中)创建可部署的 WAR 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类型ServletServletRegistrationBean将该 bean 安装在容器中,就好像它是 a<servlet/><servlet-mapping/>inweb.xml

  • @Bean类型Filteror的 AFilterRegistrationBean行为相似(如 a<filter/><filter-mapping/>)。

  • ApplicationContext这种情况下,根植于 XML 文件中,因此最简单的第一步就是将@Import其放入 SpringApplication中。这个非常简单,可以在几行中重新创建它作为@Bean定义。

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

main一旦 WAR 开始工作,我们通过向我们的 WAR 中添加一个方法来使其可执行Application,例如

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

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

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

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

于 2013-11-27T11:54:54.680 回答