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
啓動器。