Spring 在独立的 servlet 容器中启动应用程序 war
Spring Boot application war in a standalone servlet container
关于从 spring 引导应用程序构建 war 并在独立的 servlet 容器中 运行 它的一般问题。我看到的文档似乎与 Stack Overflow 上的示例不一致。
答案here shows the way I read of doing this a couple of months ago. I read this here,但指南似乎已经改变,丢失了实际的示例应用程序。
这里的"configure"方法引用了main spring boot Application.class.
public class WebInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
}
还有这些帖子 here and here 显示 "configure" 方法引用 SpringBootServletInitializer 子 class 本身。
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);
}
}
还有一个main方法
spring-boot-sample-traditional 示例应用程序位于 https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples,它显示 "WAR packaging"
做的不一样
public class WebConfig extends WebMvcConfigurerAdapter {.........
我想知道在 spring 引导中选择这些看似实现相同目标的不同方式是否存在问题?还是它们都同样有效并且可以互换?
使用Spring Initializr
http://start.spring.io/
选择您的项目类型(Gradle 或 Maven)并打包为 war。
添加 Web 作为依赖项并生成项目。
这将 bootstrap 您的应用采用 "correct" 方式。
让您的主应用程序 class 扩展 SpringBootServletInitializer
(您问题中的 Bootstrap
)或使用单独的 class(您问题中的 WebInitializer
)是取决于个人口味。我的偏好是采用 Bootstrap
方法,但它们的工作方式相同;选择你喜欢的。
如果您只打算将应用程序部署到独立的 servlet 容器,那么您不需要 main 方法。如果您想 运行 应用程序作为可执行文件 war (java -jar my-app.war
),或者您希望能够 运行 它直接在您的 IDE,即无需 IDE 将其部署到 servlet 容器。
spring-boot-sample-traditional
说明了 web.xml
到 Bootstrap 一个 Spring 启动应用程序的用法。一般来说,这不是推荐的方法,除非您被困在 Servlet 2.5 容器上。 WebMvcConfigurerAdapter
的使用与WAR打包无关。查看其web.xml
以查看相关配置。
关于从 spring 引导应用程序构建 war 并在独立的 servlet 容器中 运行 它的一般问题。我看到的文档似乎与 Stack Overflow 上的示例不一致。
答案here shows the way I read of doing this a couple of months ago. I read this here,但指南似乎已经改变,丢失了实际的示例应用程序。
这里的"configure"方法引用了main spring boot Application.class.
public class WebInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
}
还有这些帖子 here and here 显示 "configure" 方法引用 SpringBootServletInitializer 子 class 本身。
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);
}
}
还有一个main方法
spring-boot-sample-traditional 示例应用程序位于 https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples,它显示 "WAR packaging" 做的不一样
public class WebConfig extends WebMvcConfigurerAdapter {.........
我想知道在 spring 引导中选择这些看似实现相同目标的不同方式是否存在问题?还是它们都同样有效并且可以互换?
使用Spring Initializr http://start.spring.io/
选择您的项目类型(Gradle 或 Maven)并打包为 war。
添加 Web 作为依赖项并生成项目。
这将 bootstrap 您的应用采用 "correct" 方式。
让您的主应用程序 class 扩展 SpringBootServletInitializer
(您问题中的 Bootstrap
)或使用单独的 class(您问题中的 WebInitializer
)是取决于个人口味。我的偏好是采用 Bootstrap
方法,但它们的工作方式相同;选择你喜欢的。
如果您只打算将应用程序部署到独立的 servlet 容器,那么您不需要 main 方法。如果您想 运行 应用程序作为可执行文件 war (java -jar my-app.war
),或者您希望能够 运行 它直接在您的 IDE,即无需 IDE 将其部署到 servlet 容器。
spring-boot-sample-traditional
说明了 web.xml
到 Bootstrap 一个 Spring 启动应用程序的用法。一般来说,这不是推荐的方法,除非您被困在 Servlet 2.5 容器上。 WebMvcConfigurerAdapter
的使用与WAR打包无关。查看其web.xml
以查看相关配置。