Spring Boot应用程序在独立的servlet容器中进行战争

n99*_*n99 5 spring spring-mvc war maven spring-boot

关于从spring启动应用程序构建war并在独立的servlet容器中运行它的一般问题.我似乎看起来似乎与Stack Overflow上的示例不一致.

这里的答案显示了几个月前我读到这样做的方式.我在这里读到了这个,但指南似乎已经改变了丢失实际的示例应用程序.

这里的"configure"方法引用了主要的Spring引导Application.class.

public class WebInitializer extends SpringBootServletInitializer {   

   @Override
   protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(Application.class);
    }  
}
Run Code Online (Sandbox Code Playgroud)

这里这里也有这些帖子显示了引用SpringBootServletInitializer子类本身的"configure"方法.

public class BootStrap extends SpringBootServletInitializer {

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

   @Override
   protected SpringApplicationBuilder configure(
          SpringApplicationBuilder application) {
      return application.sources(BootStrap.class);
   }   
}
Run Code Online (Sandbox Code Playgroud)

还有一个主要方法.

此外,https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples上的spring-boot-sample-traditional示例应用程序显示了"WAR包装"

 public class WebConfig extends WebMvcConfigurerAdapter {.........
Run Code Online (Sandbox Code Playgroud)

我想知道选择这些不同的方式看似在春季靴子中实现相同的东西有问题吗?或者他们都同样工作,可以互换吗?

And*_*son 8

让您的主要应用程序类扩展SpringBootServletInitializer(Bootstrap在您的问题中)或使用单独的类(WebInitializer在您的问题中)取决于个人品味.我倾向于采用这种Bootstrap方法,但它们都以相同的方式工作; 挑选你喜欢的.

如果您只是将应用程序部署到独立的servlet容器,那么您不需要 main方法.如果要将应用程序作为可执行war(java -jar my-app.war)运行,或者希望能够直接在IDE中运行它,即不将IDE部署到servlet容器,则使用main方法.

spring-boot-sample-traditional说明了如何使用web.xmlBootstrap Spring Boot应用程序.一般来说,除非您遇到Servlet 2.5容器,否则这不是推荐的方法.使用WebMvcConfigurerAdapter与WAR包装无关.看看它web.xml的相关配置.