第六部分。部署Spring Boot应用程序
在部署应用程序时,Spring Boot灵活的打包选项提供了大量选择。您可以将Spring Boot应用程序部署到各种云平台,容器映像(例如
Docker)或虚拟/真实计算机。
本节介绍一些更常见的部署方案。
63.部署到云端
Spring Boot的可执行jar是现成的,适用于大多数流行的云PaaS(平台即服务)提供商。这些提供商往往要求您“自带容器”。它们管理应用程
序进程(而不是Java应用程序),因此它们需要一个中间层,使您的应用程序 适应云的运行过程概念。
两个流行的云提供商Heroku和Cloud Foundry采用“buildpack”方法。buildpack将您部署的代码包装在启动应用程序所需的任何内容中。它
可能是JDK和对 java 的调用,嵌入式Web服务器或完整的应用程序服务器。buildpack是可插拔的,但理想情况下,您应该能够尽可能少地进行
自定义。这减少了不受您控制的功能的占用空间。它最大限度地减少了开发和生产环境之间的差异。
理想情况下,您的应用程序(如Spring Boot可执行jar)具有在其中运行打包所需的所有内容。
在本节中,我们将了解如何在“入门”部分中开发并在云中运行的 简单应用程序。
63.1 Cloud Foundry
如果未指定其他buildpack,Cloud Foundry将提供默认的构建包。Cloud Foundry Java buildpack对Spring应用程序提供了出色的支持,包括
Spring Boot。您可以部署独立的可执行jar应用程序以及传统的 .war 打包应用程序。
构建应用程序(例如,使用 mvn clean package )并安装了 cf 命令行工具后,使用 cf push 命令部署应用程序,将路径替换为已编译的
{12}。/}。安装了 cf 命令行工具后,使用 cf push 命令部署应用程序,将路径替换为已编译的{2759} /}。在推送应用程序之前,请务必 使
用 cf 命令行客户端登录。以下行显示使用 cf push 命令部署应用程序:
$ cf push acloudyspringtime -p target/demo-0.0.1-SNAPSHOT.jar
在前面的示例中,我们将 acloudyspringtime 替换为您提供的任何值 cf 作为应用程序的名称。
有关更多选项,请参阅 cf push 文档。如果 manifest.yml 同一目录中存在Cloud Foundry 文件,则会考虑该文件。
63.1.1绑定到服务
默认情况下,有关正在运行的应用程序的元数据以及服务连接信息将作为环境变量公开给应用程序(例如:$VCAP_SERVICES )。此体系结构决
策归功于Cloud Foundry的多语言(任何语言和平台都可以作为buildpack支持)。进程范围的环境变量与语言无关。
环境变量并不总是适用于最简单的API,因此Spring Boot会自动提取它们并将数据展平为可通过Spring的 Environment 抽象访问的属性,如以
下示例所示:
@Component
class MyBean implements EnvironmentAware {
private String instanceId;
@Override
public void setEnvironment(Environment environment) {
this.instanceId = environment.getProperty("vcap.application.instance_id");
}
// ...
}
所有Cloud Foundry属性都以 vcap 为前缀。您可以使用 vcap 属性来访问应用程序信息(例如应用程序的公共URL)和服务信息(例如数据库凭
据)。有关 完整的详细信息,请参阅 “CloudFoundryVcapEnvironmentPostProcessor” Javadoc。
该Spring云连接器项目是任务,如配置数据源更适合。Spring Boot包括自动配置支持
和 spring-boot-starter-cloud-connectors 启动器。