关于从spring启动应用程序构建war并在独立的servlet容器中运行它的一般问题.我似乎看起来似乎与Stack Overflow上的示例不一致.
答案@L_301_1@显示了几个月前我读到这样做的方式.我读了这篇here,但指南似乎已经改变了丢失实际的示例应用程序.
这里的“configure”方法引用了主要的Spring引导Application.class.
public class WebInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
}
还有这些帖子here和here显示了引用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);
}
}
还有一个主要方法.
也是https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples的spring-boot-sample-traditional示例应用程序,显示“WAR包装”
做得与众不同
public class WebConfig extends WebMvcConfigurerAdapter {.........
我想知道选择这些不同的方式看似在春季靴子中实现相同的东西有问题吗?或者他们都同样工作,可以互换吗?
最佳答案
让你的主应用程序类扩展SpringBootServletInitializer(你问题中的Bootstrap)或使用一个单独的类(问题中的WebInitializer)归结为个人品味.我倾向于采用Bootstrap方法,但它们都以相同的方式工作;挑选你喜欢的.
如果您只是将应用程序部署到独立的servlet容器,那么您不需要main方法.如果要将应用程序作为可执行的war(java -jar my-app.war)运行,或者希望能够直接在IDE中运行它,即无需将IDE部署到IDE中,则使用main方法. servlet容器.
spring-boot-sample-traditional说明了使用web.xml来引导Spring Boot应用程序.一般来说,除非您遇到Servlet 2.5容器,否则这不是推荐的方法.使用WebMvcConfigurerAdapter与WAR打包无关.查看其web.xml以查看相关的配置部分.