关于从spring启动应用程序构建war并在独立的servlet容器中运行它的一般问题。我看来似乎与Stack Overflow上的例子不一致。
答案here显示了几个月前我读到这样做的方式。我读了这个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 {.........
我想知道选择这些不同的方式看似在春季靴子中实现相同的东西有问题吗?或者他们都同样工作并且可以互换?
答案 0 :(得分:8)
让您的主应用程序类扩展SpringBootServletInitializer
(问题中为Bootstrap
)或使用单独的类(问题中为WebInitializer
)取决于个人品味。我倾向于采用Bootstrap
方法,但它们都以相同的方式工作;挑选你喜欢的。
如果您只是将应用程序部署到独立的servlet容器,那么您不需要主要方法。如果要将应用程序作为可执行的war(java -jar my-app.war
)运行,或者希望能够直接在IDE中运行它,即无需将IDE部署到servlet容器,则使用main方法。
spring-boot-sample-traditional
说明了使用web.xml
来引导Spring Boot应用程序。一般来说,除非您卡在Servlet 2.5容器上,否则这不是推荐的方法。 WebMvcConfigurerAdapter
的使用与WAR包装无关。查看其web.xml
以查看相关的配置部分。
答案 1 :(得分:4)
使用Spring Initializr http://start.spring.io/
选择您的项目类型(Gradle或Maven)和包装为战争。
将Web添加为依赖项并生成项目。
这将使用"正确"来引导您的应用。方式。