独立 servlet 容器中的 Spring Boot 应用程序 war

标签 spring maven spring-mvc spring-boot war

关于从 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);
    }  
}

还有这些帖子herehere显示引用 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/

相关文章:

java - 如何从STS(spring工具套件)连接到数据库(oracle)

java - 具有持久队列的服务器推送Java框架?

java - jersey-spring 和 jenkins - 读取 zip 文件/jersey-core-1.8.jar 时出现奇怪错误

spring - 我可以拥有多个Spring Cloud Config Server吗?

android - 从 Maven 添加 facebook sdk 后出现 "Error:Attribute "样式 "has already been defined"错误

java - 在 osx "the import java.lang.invoke cannot be resolved"上构建 WALA

java - Spring MVC中重定向和 View 渲染的区别

java - org.springframework.beans.factory.BeanCreationException : Error creating bean with name 'entityManagerFactory' defined in ServletContext resource

java - 如何在 Spring 中加载资源并将其内容用作字符串

java - 如何将一个项目作为 Maven 依赖项添加到另一个项目