Spring Boot的灵活打包选项在部署应用程序时提供了大量的选择,你能够将Spring Boot应用程序部署到各类云平台、容器映像(例如Docker)或虚拟/真实机器上。html
本节介绍一些更常见的部署场景。java
Spring Boot的可执行jar是为大多数流行的云PaaS(Platform-as-a-Service)提供者准备的,这些供应商倾向于要求你“自带容器”,它们管理应用程序进程(不是专门的Java应用程序),所以,他们须要一个中间层,使你的应用程序适应云的运行进程理念。git
两家受欢迎的云服务提供商Heroku和cloud Foundry采用了“buildpack”的方法,“buildpack”将你部署的代码封装到任何须要启动应用程序的地方,它多是一个JDK和一个对java
的调用,一个嵌入式web服务器,或者一个成熟的应用服务器。buildpack是可插拔的,但理想状况下,你应该可以经过尽量少的自定义来获取它,这将减小不受你控制的功能的占用,它将开发和生产环境之间的差别最小化。github
理想状况下,你的应用程序,就像Spring Boot的可执行jar,拥有它须要在其中运行的全部东西。web
在本节中,咱们将讨论如何得到在开始章节咱们开发的简单应用程序,并在云中运行。spring
若是没有指定其余的buildpack, Cloud Foundry提供了默认的buildpack,Cloud Foundry的Java buildpack对Spring应用程序(包括Spring Boot)有很好的支持,你能够部署独立的可执行的jar应用程序和传统的.war
打包应用程序。数据库
一旦你构建了应用程序(例如,经过使用mvn clean package
)并安装了cf命令行工具,就可使用cf push
命令部署应用程序,将路径替换为已编译的.jar
。在推送应用程序以前,肯定已经登陆了cf命令行客户端。下面的行显示使用cf push
命令来部署应用程序:segmentfault
$ cf push acloudyspringtime -p target/demo-0.0.1-SNAPSHOT.jar
在前面的示例中,咱们将acloudyspringtime
替换为您提供的cf
做为应用程序名称的任何值。
更多选项见cf push
文档,若是一个Cloud Foundry的manifest.yml文件存在同一目录,它将被承认。api
此时,cf
开始上传你的应用程序,产生相似如下示例的输出:服务器
Uploading acloudyspringtime... OK Preparing to start acloudyspringtime... OK -----> Downloaded app package (8.9M) -----> Java Buildpack Version: v3.12 (offline) | https://github.com/cloudfoundry/java- buildpack.git#6f25b7e -----> Downloading Open Jdk JRE 1.8.0_121 from https://java-buildpack.cloudfoundry.org/openjdk/ trusty/x86_64/openjdk-1.8.0_121.tar.gz (found in cache) Expanding Open Jdk JRE to .java-buildpack/open_jdk_jre (1.6s) -----> Downloading Open JDK Like Memory Calculator 2.0.2_RELEASE from https://java- buildpack.cloudfoundry.org/memory-calculator/trusty/x86_64/memory-calculator-2.0.2_RELEASE.tar.gz (found in cache) Memory Settings: -Xss349K -Xmx681574K -XX:MaxMetaspaceSize=104857K -Xms681574K - XX:MetaspaceSize=104857K -----> Downloading Container Certificate Trust Store 1.0.0_RELEASE from https://java- buildpack.cloudfoundry.org/container-certificate-trust-store/container-certificate-trust- store-1.0.0_RELEASE.jar (found in cache) Adding certificates to .java-buildpack/container_certificate_trust_store/truststore.jks (0.6s) -----> Downloading Spring Auto Reconfiguration 1.10.0_RELEASE from https://java- buildpack.cloudfoundry.org/auto-reconfiguration/auto-reconfiguration-1.10.0_RELEASE.jar (found in cache) Checking status of app 'acloudyspringtime'... 0 of 1 instances running (1 starting) ... 0 of 1 instances running (1 starting) ... 0 of 1 instances running (1 starting) ... 1 of 1 instances running (1 running) App started
恭喜你!应用程序如今是存活的!
一旦你的应用程序被激活,你可使用cf apps
命令来验证已部署应用程序的状态,以下面的示例所示:
$ cf apps Getting applications in ... OK name requested state instances memory disk urls ... acloudyspringtime started 1/1 512M 1G acloudyspringtime.cfapps.io ...
一旦Cloud Foundry认可你的应用程序已被部署,你应该可以在给定的URI中找到应用程序,在前面的示例中,你能够在http://acloudyspringtime.cfapps.io/
中找到它。
默认状况下,关于正在运行的应用程序和服务链接信息的元数据将被做为环境变量公开(例如:$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 Cloud Connectors项目更适合于配置数据源等任务,Spring Boot包括自动配置支持和
spring-boot-starter-cloud-connectors
启动器。