javascript
cloud foundry_将Spring Boot应用程序绑定到Cloud Foundry中的服务的方法
cloud foundry
如果要試用Cloud Foundry ,最簡(jiǎn)單的方法是下載出色的PCF開(kāi)發(fā)人員或在Pivotal Web Services站點(diǎn)上創(chuàng)建試用帳戶。
其余文章假定您已經(jīng)安裝了Cloud Foundry,并且對(duì)Cloud Foundry有了較高的了解。 這篇文章的目的是列出將Java應(yīng)用程序集成到服務(wù)實(shí)例時(shí)可以使用的選項(xiàng)–該演示使用mysql作為示例服務(wù)進(jìn)行集成,但是這種方法足夠通用。
應(yīng)用概述
該應(yīng)用程序是相當(dāng)簡(jiǎn)單的Spring-Boot應(yīng)用程序,它是一個(gè)REST服務(wù),它公開(kāi)了三種域類型及其之間的關(guān)系,代表了大學(xué)–課程,教師和學(xué)生。 域?qū)嵗龑⒈4娴組ySQL數(shù)據(jù)庫(kù)中。 如果您想繼續(xù)前進(jìn),可以在github上找到整個(gè)源代碼和方法。
要在本地嘗試該應(yīng)用程序,請(qǐng)首先在具有自制軟件的Mac OSX盒子上安裝本地mysql服務(wù)器數(shù)據(jù)庫(kù),然后可以運(yùn)行以下命令集:
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下調(diào)出Spring-Boot:
mvn spring-boot:run帶有示例數(shù)據(jù)的端點(diǎn)將在http:// localhost:8080 / courses上提供。
在Cloud Foundry上嘗試此應(yīng)用程序
如果您在本地運(yùn)行PCF Dev的安裝,則可以通過(guò)以下方式嘗試部署應(yīng)用程序:
cf api api.local.pcfdev.io --skip-ssl-validation cf login # login with admin/admin credentials創(chuàng)建一個(gè)Mysql服務(wù)實(shí)例:
cf create-service p-mysql 512mb mydb并推送應(yīng)用! (manifest.yml提供了應(yīng)用程序與服務(wù)實(shí)例的綁定)
cf push端點(diǎn)應(yīng)該位于http://cf-db-services-sample-auto.local.pcfdev.io/courses
服務(wù)連通性的方法
現(xiàn)在我們有了一個(gè)可以在本地運(yùn)行并在示例本地Cloud Foundry上運(yùn)行的應(yīng)用程序,這些就是連接到服務(wù)實(shí)例的方法。
方法1 –不執(zhí)行任何操作,讓Java buildpack處理連接詳細(xì)信息
cf-db-services-sample-auto項(xiàng)目中演示了此方法。 在這里,已經(jīng)使用Spring Boot指定了到本地?cái)?shù)據(jù)庫(kù)的連接,如下所示:
---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將此應(yīng)用程序推送到Cloud Foundry時(shí),一個(gè)名為java-buildpack-auto-reconfiguration的組件被注入到應(yīng)用程序中,該組件根據(jù)運(yùn)行時(shí)服務(wù)綁定重新配置與服務(wù)的連接。
方法2 –禁用自動(dòng)重新配置并使用運(yùn)行時(shí)屬性
cf-db-services-sample-props項(xiàng)目中演示了此方法。 當(dāng)服務(wù)綁定到應(yīng)用程序時(shí),在鍵“ VCAP_SERVICES”下將一組環(huán)境屬性注入到應(yīng)用程序中。 對(duì)于此特定服務(wù),該條目看起來(lái)類似于以下幾行:
"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使用起來(lái)有點(diǎn)笨拙,但是Spring Boot會(huì)自動(dòng)將此數(shù)據(jù)轉(zhuǎn)換為一組扁平的屬性,如下所示:
"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",鑒于此,可以通過(guò)以下方式在Spring Boot應(yīng)用程序中指定與數(shù)據(jù)庫(kù)的連接–在application.yml文件中:
spring:datasource:url: ${vcap.services.mydb.credentials.jdbcUrl}username: ${vcap.services.mydb.credentials.username}password: ${vcap.services.mydb.credentials.password}不過(guò),有一個(gè)小問(wèn)題是,由于我現(xiàn)在已明確控制指定服務(wù)連接的控制,因此必須禁用運(yùn)行時(shí)java-buildpack-auto-reconfiguration,這可以通過(guò)清單元數(shù)據(jù)來(lái)完成:
--- 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項(xiàng)目,并且指定服務(wù)連接的配置如下所示,并在cf-db-services-sample-connector子項(xiàng)目中進(jìn)行了演示:
@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.簡(jiǎn)單,可以在本地運(yùn)行的應(yīng)用程序無(wú)需更改即可在云上運(yùn)行 | 1.神奇的–對(duì)于不了解基本流程的人,自動(dòng)重新配置可能看起來(lái)很神奇 2.支持的服務(wù)類型數(shù)量非常有限– 例如,如果需要與Cassandra的連接,則自動(dòng)重新配置將不起作用 |
| 方法2 –顯式屬性 | 1.相當(dāng)簡(jiǎn)單。 2.遵循Spring Boot的方法,并使用了一些基于Boot的應(yīng)用程序的最佳實(shí)踐-例如,創(chuàng)建數(shù)據(jù)源連接池的順序是確定的,所有這些最佳實(shí)踐都將使用此方法。 | 1.必須明確禁用自動(dòng)重新配置 2.需要知道扁平化屬性的外觀 3.可能必須通過(guò)環(huán)境屬性手動(dòng)注入“云”配置文件,以區(qū)分本地開(kāi)發(fā)和云部署 4.很難封裝與較新的服務(wù)類型的連接的可重用性-例如Cassandra或DynamoDB。 |
| 方法3 – Spring Cloud連接器 | 1.易于整合 2.易于添加可重復(fù)使用的集成到較新的服務(wù)類型 | 1.繞過(guò)Spring Boot連接池邏輯的優(yōu)化。 |
結(jié)論
我個(gè)人更喜歡采用方法2,因?yàn)樗cSpring Boot的默認(rèn)設(shè)置最接近,而不受方法的不利影響。 如果需要與服務(wù)建立更復(fù)雜的連接,我可能會(huì)采用方法3。
參考資料
斯科特·弗雷德里克 ( Scott Frederick )的Spring音樂(lè)一直是他的常客。
2.我從Ben Hale的pong_matcher_spring樣本中慷慨地借了下來(lái) 。
翻譯自: https://www.javacodegeeks.com/2016/05/approaches-binding-spring-boot-application-service-cloud-foundry.html
cloud foundry
總結(jié)
以上是生活随笔為你收集整理的cloud foundry_将Spring Boot应用程序绑定到Cloud Foundry中的服务的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 安卓模拟手游登ios账号(安卓模拟手游)
- 下一篇: gradle idea java ssm