javascript
cloud foundry_将Spring Boot应用程序绑定到Cloud Foundry中的服务的方法
cloud foundry
如果要試用Cloud Foundry ,最簡單的方法是下載出色的PCF開發人員或在Pivotal Web Services站點上創建試用帳戶。
其余文章假定您已經安裝了Cloud Foundry,并且對Cloud Foundry有了較高的了解。 這篇文章的目的是列出將Java應用程序集成到服務實例時可以使用的選項–該演示使用mysql作為示例服務進行集成,但是這種方法足夠通用。
應用概述
該應用程序是相當簡單的Spring-Boot應用程序,它是一個REST服務,它公開了三種域類型及其之間的關系,代表了大學–課程,教師和學生。 域實例將保存到MySQL數據庫中。 如果您想繼續前進,可以在github上找到整個源代碼和方法。
要在本地嘗試該應用程序,請首先在具有自制軟件的Mac OSX盒子上安裝本地mysql服務器數據庫,然后可以運行以下命令集:
brew install mysqlmysql.server start mysql -u root # on the mysql prompt: CREATE USER 'univadmin'@'localhost' IDENTIFIED BY 'univadmin'; CREATE DATABASE univdb; GRANT ALL ON univdb.* TO 'univadmin'@'localhost';在cf-db-services-sample-auto下調出Spring-Boot:
mvn spring-boot:run帶有示例數據的端點將在http:// localhost:8080 / courses上提供。
在Cloud Foundry上嘗試此應用程序
如果您在本地運行PCF Dev的安裝,則可以通過以下方式嘗試部署應用程序:
cf api api.local.pcfdev.io --skip-ssl-validation cf login # login with admin/admin credentials創建一個Mysql服務實例:
cf create-service p-mysql 512mb mydb并推送應用! (manifest.yml提供了應用程序與服務實例的綁定)
cf push端點應該位于http://cf-db-services-sample-auto.local.pcfdev.io/courses
服務連通性的方法
現在我們有了一個可以在本地運行并在示例本地Cloud Foundry上運行的應用程序,這些就是連接到服務實例的方法。
方法1 –不執行任何操作,讓Java buildpack處理連接詳細信息
cf-db-services-sample-auto項目中演示了此方法。 在這里,已經使用Spring Boot指定了到本地數據庫的連接,如下所示:
---spring:jpa:show-sql: truehibernate.ddl-auto: nonedatabase: MYSQLdatasource:driverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost/univdb?autoReconnect=true&useSSL=falseusername: univadminpassword: univadmin使用Java Buildpack將此應用程序推送到Cloud Foundry時,一個名為java-buildpack-auto-reconfiguration的組件被注入到應用程序中,該組件根據運行時服務綁定重新配置與服務的連接。
方法2 –禁用自動重新配置并使用運行時屬性
cf-db-services-sample-props項目中演示了此方法。 當服務綁定到應用程序時,在鍵“ VCAP_SERVICES”下將一組環境屬性注入到應用程序中。 對于此特定服務,該條目看起來類似于以下幾行:
"VCAP_SERVICES": {"p-mysql": [{"credentials": {"hostname": "mysql.local.pcfdev.io","jdbcUrl": "jdbc:mysql://mysql.local.pcfdev.io:3306/cf_456d9e1e_e31e_43bc_8e94_f8793dffdad5?user=**\u0026password=***","name": "cf_456d9e1e_e31e_43bc_8e94_f8793dffdad5","password": "***","port": 3306,"uri": "mysql://***:***@mysql.local.pcfdev.io:3306/cf_456d9e1e_e31e_43bc_8e94_f8793dffdad5?reconnect=true","username": "***"},"label": "p-mysql","name": "mydb","plan": "512mb","provider": null,"syslog_drain_url": null,"tags": ["mysql"]}]}原始的json使用起來有點笨拙,但是Spring Boot會自動將此數據轉換為一組扁平的屬性,如下所示:
"vcap.services.mydb.plan": "512mb", "vcap.services.mydb.credentials.username": "******", "vcap.services.mydb.credentials.port": "******", "vcap.services.mydb.credentials.jdbcUrl": "******", "vcap.services.mydb.credentials.hostname": "******", "vcap.services.mydb.tags[0]": "mysql", "vcap.services.mydb.credentials.uri": "******", "vcap.services.mydb.tags": "mysql", "vcap.services.mydb.credentials.name": "******", "vcap.services.mydb.label": "p-mysql", "vcap.services.mydb.syslog_drain_url": "", "vcap.services.mydb.provider": "", "vcap.services.mydb.credentials.password": "******", "vcap.services.mydb.name": "mydb",鑒于此,可以通過以下方式在Spring Boot應用程序中指定與數據庫的連接–在application.yml文件中:
spring:datasource:url: ${vcap.services.mydb.credentials.jdbcUrl}username: ${vcap.services.mydb.credentials.username}password: ${vcap.services.mydb.credentials.password}不過,有一個小問題是,由于我現在已明確控制指定服務連接的控制,因此必須禁用運行時java-buildpack-auto-reconfiguration,這可以通過清單元數據來完成:
--- applications:- name: cf-db-services-sample-propspath: target/cf-db-services-sample-props-1.0.0.RELEASE.jarmemory: 512Menv:JAVA_OPTS: -Djava.security.egd=file:/dev/./urandomSPRING_PROFILES_ACTIVE: cloudservices:- mydbbuildpack: https://github.com/cloudfoundry/java-buildpack.gitenv:JBP_CONFIG_SPRING_AUTO_RECONFIGURATION: '{enabled: false}'方法3 –使用Spring Cloud連接器
第三種方法是使用出色的Spring Cloud Connectors項目,并且指定服務連接的配置如下所示,并在cf-db-services-sample-connector子項目中進行了演示:
@Configuration @Profile("cloud") public class CloudFoundryDatabaseConfig {@Beanpublic Cloud cloud() {return new CloudFactory().getCloud();}@Beanpublic DataSource dataSource() {DataSource dataSource = cloud().getServiceConnector("mydb", DataSource.class, null);return dataSource;} }利弊
這些是每種方法的利弊:
| 方法1 –讓Buildpack處理 | 1.簡單,可以在本地運行的應用程序無需更改即可在云上運行 | 1.神奇的–對于不了解基本流程的人,自動重新配置可能看起來很神奇 2.支持的服務類型數量非常有限– 例如,如果需要與Cassandra的連接,則自動重新配置將不起作用 |
| 方法2 –顯式屬性 | 1.相當簡單。 2.遵循Spring Boot的方法,并使用了一些基于Boot的應用程序的最佳實踐-例如,創建數據源連接池的順序是確定的,所有這些最佳實踐都將使用此方法。 | 1.必須明確禁用自動重新配置 2.需要知道扁平化屬性的外觀 3.可能必須通過環境屬性手動注入“云”配置文件,以區分本地開發和云部署 4.很難封裝與較新的服務類型的連接的可重用性-例如Cassandra或DynamoDB。 |
| 方法3 – Spring Cloud連接器 | 1.易于整合 2.易于添加可重復使用的集成到較新的服務類型 | 1.繞過Spring Boot連接池邏輯的優化。 |
結論
我個人更喜歡采用方法2,因為它與Spring Boot的默認設置最接近,而不受方法的不利影響。 如果需要與服務建立更復雜的連接,我可能會采用方法3。
參考資料
斯科特·弗雷德里克 ( Scott Frederick )的Spring音樂一直是他的???。
2.我從Ben Hale的pong_matcher_spring樣本中慷慨地借了下來 。
翻譯自: https://www.javacodegeeks.com/2016/05/approaches-binding-spring-boot-application-service-cloud-foundry.html
cloud foundry
總結
以上是生活随笔為你收集整理的cloud foundry_将Spring Boot应用程序绑定到Cloud Foundry中的服务的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓模拟手游登ios账号(安卓模拟手游)
- 下一篇: 筹备案场服务方案(筹备案)