关于从 Spring Boot 应用程序构建 war 并在独立的 servlet 容器中运行它的一般问题。我的文档似乎与 Stack Overflow 上的示例不一致。
答案here展示了我几个月前读到的这样做的方式。我读了这个 here ,但该指南似乎已更改丢失实际示例应用程序。
这里的“configure”方法引用了主要的spring boot Application.class。
public class WebInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
}
还有这些帖子here和 here显示引用 SpringBootServletInitializer 子类本身的“配置”方法。
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 {.........
我想知道在 Spring Boot 中选择这些看似实现相同目标的不同方式是否存在问题?或者它们是否都同样有效并且可以互换?
最佳答案
让您的主应用程序类扩展 SpringBootServletInitializer
(您的问题中的 Bootstrap
)或使用单独的类(您的问题中的 WebInitializer
)取决于个人品味。我的偏好是走Bootstrap
方法,但它们都以相同的方式工作;选择你喜欢的。
如果您只想将应用程序部署到独立的 servlet 容器,则不需要 main 方法。如果您想将应用程序作为可执行 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
查看相关配置。
关于独立 servlet 容器中的 Spring Boot 应用程序 war ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28463016/