权衡各种部署方案

我们可以以多种方式构建和运行Spring Boot应用。包括以下方式。

  • 使用Spring Tool Suite或IntelliJ IDEA在IDE中运行应用。

  • 在命令行中通过Maven spring-boot:run goal或Gradle bootRun任务运行应用。

  • 使用Maven或Gradle生成可执行的JAR文件。它既可以在命令行运行,也可以部署到云中。

  • 使用Maven或Gradle生成WAR文件,以部署到传统的Java应用服务器中。

  • 使用Maven或Gradle制作容器镜像。这可以在任何支持容器的地方部署,包括Kubernetes环境。

这些可选方案都非常适合在开发阶段运行应用。但是,如果我们想要将应用部署到生产环境或者其他非开发环境,又该怎么办呢?

通过IDE或者Maven、Gradle运行应用的方式并不适用于生产环境,使用可执行的JAR文件或者传统的WAR文件才是将应用部署到生产环境的可行方案。在WAR文件、JAR文件和容器镜像之间,我们该选择哪种呢?通常,这种选择取决于要将应用部署到传统的Java应用服务器中还是部署到云中,如下所示。

  • 部署到平台即服务(Platform as a Service, PaaS)云:如果你计划将应用部署到PaaS云平台,如Cloud Foundry,那么可执行的JAR文件是最佳选择。即便云平台支持WAR部署,JAR文件格式也要比WAR格式简单得多,WAR文件是专门针对应用服务器部署设计的。

  • 部署到Java应用服务器中:如果必须要将应用部署到Tomcat、WebSphere、WebLogic或其他传统的Java应用服务器中,那么我们其实别无选择,只能将应用构建为WAR文件。

  • 部署到Kubernetes中:现代云平台越来越多地基于Kubernetes构建,当部署到Kubernetes(它本身是一个容器编排系统)时,明智之选是将你的应用程序构建成一个容器镜像。

在本章中,我们将会关注3种部署场景:

  • 将Spring Boot应用作为可执行的JAR文件,推送到PaaS云平台中;

  • 将Spring Boot应用以WAR文件的形式部署到Java应用服务器中,比如Tomcat;

  • 将Spring Boot应用打包到Docker容器中,将其部署到任何支持Docker形式的平台中。

首先,我们看一下构建Spring Boot应用最常见的方式——可执行的JAR文件。