javascript
使用Spring-Cloud将Spring Boot应用程序部署到Cloud Foundry
我有一個基于Spring Boot的小型應用程序 ,該應用程序使用Postgres數據庫作為數據存儲。
我想記錄將示例應用程序部署到Cloud Foundry的步驟 。 Spring Boot參考指南中描述了一些步驟 ,但是這些指南并未充分說明如何與基于云的環境中提供的數據存儲集成。 Spring-cloud提供了連接在云上部署的基于Spring的應用程序以發現并連接到綁定服務的膠水,因此第一步是使用以下pom條目將Spring-cloud庫引入項目中:
一旦引入了這種依賴性,就很容易連接到綁定的服務,只需按照以下方式定義配置:
@Configuration public class PostgresCloudConfig extends AbstractCloudConfig {@Beanpublic DataSource dataSource() {return connectionFactory().dataSource();}}Spring-Cloud理解該應用程序已部署在特定的云上(當前的Cloud Foundry和Heroku通過查找已部署的Cloud平臺的某些特征),發現了綁定的服務,認識到存在一個綁定的服務,基于Postgres的數據源可以使用該綁定服務創建并返回數據源作為Spring bean。 現在,該應用程序可以干凈地部署到基于Cloud Foundry的云中。 可以在使用bosh-lite部署的Cloud Foundry版本中試用該示例應用程序,這是在Cloud Foundry啟動并使用bosh-lite運行后我機器中的步驟的樣子:以下命令在以下位置創建用戶提供的服務Cloud Foundry:
cf create-user-provided-service psgservice -p '{"uri":"postgres://postgres:p0stgr3s@bkunjummen-mbp.local:5432/hotelsdb"}'現在,推動應用程序,但是不要啟動它。 一旦以上服務綁定到應用程序,我們就可以這樣做:
cf push spring-boot-mvc-test -p target/spring-boot-mvc-test-1.0.0-SNAPSHOT.war --no-start將服務綁定到應用程序并重新啟動應用程序:
cf bind-service spring-boot-mvc-test psgservice cf restart spring-boot-mvc-test本質上就是這樣,理想情況下,Spring Cloud應該接管并干凈地解析來自綁定服務的憑證,該憑證在Cloud Foundry中轉換為稱為VCAP_SERVICES的環境變量,并從中創建數據源。 但是,這種方法存在一個問題–一旦使用spring-cloud方法創建了數據源bean,它就不再在本地環境中工作。 為此,可能的解決方法是使用Spring配置文件,假設在返回基于Spring-cloud的數據源的Cloud環境中有一個不同的“ cloud” Spring配置文件可用:
@Profile("cloud") @Configuration public class PostgresCloudConfig extends AbstractCloudConfig {@Beanpublic DataSource dataSource() {return connectionFactory().dataSource();} }并讓Spring-boot自動配置在默認的本地環境中創建數據源,這樣配置既可以在本地也可以在Cloud中工作。 該“云”配置文件來自何處,可以使用ApplicationContextInitializer創建它,并采用以下方式:
public class SampleWebApplicationInitializer implements ApplicationContextInitializer<AnnotationConfigEmbeddedWebApplicationContext> {private static final Log logger = LogFactory.getLog(SampleWebApplicationInitializer.class);@Overridepublic void initialize(AnnotationConfigEmbeddedWebApplicationContext applicationContext) {Cloud cloud = getCloud();ConfigurableEnvironment appEnvironment = applicationContext.getEnvironment();if (cloud!=null) {appEnvironment.addActiveProfile("cloud");}logger.info("Cloud profile active");}private Cloud getCloud() {try {CloudFactory cloudFactory = new CloudFactory();return cloudFactory.getCloud();} catch (CloudException ce) {return null;}} }該初始化程序利用Spring-cloud的掃描功能來激活“云”配置文件。 我想嘗試的最后一件事是在Spring-Cloud的眼中使我的本地設備表現得至少像Cloud,這可以通過添加一些環境變量來完成,Spring-Cloud使用這些環境變量來確定云的類型。應用程序已部署,以下是我在本地的啟動腳本,該應用程序假裝成好像已部署在Cloud Foundry中:
read -r -d '' VCAP_APPLICATION <<'ENDOFVAR' {"application_version":"1","application_name":"spring-boot-mvc-test","application_uris":[""],"version":"1.0","name":"spring-boot-mvc-test","instance_id":"abcd","instance_index":0,"host":"0.0.0.0","port":61008} ENDOFVARexport VCAP_APPLICATION=$VCAP_APPLICATIONread -r -d '' VCAP_SERVICES <<'ENDOFVAR' {"postgres":[{"name":"psgservice","label":"postgresql","tags":["postgresql"],"plan":"Standard","credentials":{"uri":"postgres://postgres:p0stgr3s@bkunjummen-mbp.local:5432/hotelsdb"}}]} ENDOFVARexport VCAP_SERVICES=$VCAP_SERVICESmvn spring-boot:run- 可以在以下 github位置獲得整個示例: https : //github.com/bijukunjummen/spring-boot-mvc-test
結論
Spring Boot和Spring-Cloud項目現在提供了一個出色的工具集,可以創建支持Spring的云就緒應用程序,希望這些說明對將Spring Boot與Spring-Cloud集成以及將它們用于無縫的本地和云部署有用。
翻譯自: https://www.javacodegeeks.com/2014/08/deploying-a-spring-boot-application-to-cloud-foundry-with-spring-cloud.html
總結
以上是生活随笔為你收集整理的使用Spring-Cloud将Spring Boot应用程序部署到Cloud Foundry的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何升级ie浏览器版本到11
- 下一篇: 跳舞机设置(跳舞机设置怎么使用)