不为可执行WAR调用SpringBootServletInitializer#configure

时间:2016-09-27 15:45:44

标签: spring-boot

我想将war应用程序迁移到Spring启动应用程序。

我按照http://docs.spring.io/spring-boot/docs/1.4.1.RELEASE/reference/htmlsingle/#howto-convert-an-existing-application-to-spring-boot的指示进行了课程

@EnableAutoConfiguration
public class MyInitializer extends SpringBootServletInitializer {

  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    application.banner(new MyBanner());
    application.sources(MyEndpoint.class);
    return application;
  }
}

我得到了可部署的WAR。

我下一阶段我想获得可执行的WAR。我上课了

public class MyApplication {

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

}

问题在于,当我调用java -jar target/myapp.war MyInitializer时,#configure未执行

我有点困惑。如何避免从MyInitializer到MyApplication的复制粘贴逻辑。我是否必须将这些课程加入其中?

1 个答案:

答案 0 :(得分:4)

我个人将两者合并在一起:

@SpringBootApplication
public class MyApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return MyApplication.build(builder);
    }

    public static void main(String[] args) {
        MyApplication.build(new SpringApplicationBuilder()).run(args);
    }

    private static SpringApplicationBuilder build(SpringApplicationBuilder builder) {
        return builder.banner(new MyBanner()).sources(MyEndpoint.class);
    }
}
  • 我真的不认为SpringBootServletInitializer会永远存在 将WAR作为可执行文件启动时执行。即便如此 文件扩展名为WAR,您实际上将其用作JAR

  • 从命令行启动时, Spring Boot入口点是主要方法,SpringBootServletInitializer不会被解释为 Spring Boot入口点

  • SpringBootServletInitializer仅在部署为WAR时使用:容器将SpringBootServletInitializer用作 Spring Boot入口点(并且主方法将被完全忽略)。