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中的服务的方法相关推荐
- 将Spring Boot应用程序绑定到Cloud Foundry中的服务的方法
如果您想试用Cloud Foundry ,最简单的方法是下载出色的PCF开发人员或在Pivotal Web Services站点上创建试用帐户. 文章的其余部分假定您已经安装了Cloud Foundr ...
- 使用Spring-Cloud将Spring Boot应用程序部署到Cloud Foundry
我有一个基于Spring Boot的小型应用程序 ,该应用程序使用Postgres数据库作为数据存储. 我想记录将示例应用程序部署到Cloud Foundry的步骤 . Spring Boot参考指南 ...
- 将Spring Boot应用程序注册成为系统服务
文章目录 前期准备 打包成可执行jar包 注册成为liunx服务 System V Init Systemd Upstart 在Windows中安装 Windows Service Wrapper J ...
- SpringBoot之二:部署Spring Boot应用程序方式
衡量多种部署方式 Spring Boot应用程序有多种构建和运行方式,其中一些你已经使用过了. 在IDE中运行应用程序(涉及Spring ToolSuite或IntelliJ IDEA). 使用Mav ...
- buildpack_使用Buildpack容器化Spring Boot应用程序
buildpack 在本文中,我们将看到如何使用Buildpacks容器化Spring Boot应用程序. 在先前的一篇文章中,我讨论了Jib . Jib允许我们在不使用Dockerfile的情况下将 ...
- docker jib_Jib –为Spring Boot应用程序构建docker映像
docker jib 使用Jib为示例Spring Boot应用程序创建docker映像是如此容易,这让我感到惊喜. 让我首先将Jib与以前使用的方法进行对比. 我正在使用bmuschko出色的gra ...
- Jib –为Spring Boot应用程序构建docker映像
使用Jib为示例Spring Boot应用程序创建docker映像是如此容易,这让我感到惊喜. 让我首先将Jib与以前使用的方法进行对比. 我正在使用bmuschko出色的gradle-docker插 ...
- Spring Boot Admin –用于管理Spring Boot应用程序的Admin UI
作为微服务开发的一部分,我们许多人都将Spring Boot与Spring Cloud功能一起使用. 在微服务领域,我们将有许多Spring Boot应用程序将在相同/不同的主机上运行. 如果将Spr ...
- Openshift:使用Java 8在Wildfly 8.2.0上构建Spring Boot应用程序
OpenShift DIY墨盒是在OpenShift上测试不受支持的语言的好方法. 但是它不具有可伸缩性(您可以在此处为可伸缩DIY墨盒投票),这使得它很难与生产级Spring Boot应用程序一起使 ...
最新文章
- 收藏 | GPU多卡并行训练总结
- OKR落地的四个基本因素是什么?
- .net 网页播放器
- ajax跨域请求问题
- Leetcode--94. 二叉树的中序遍历(迭代递归)
- java media.player_关于Java:如何正确发布Android MediaPlayer
- 【Vue】—创建组件
- Nodejs版本的企业微信中接收消息与腾讯对接之验证URL 代码已经上传,可以去下载
- JVM-class文件完全解析-字段表集合
- mysql 批量插入 优化_mysql 批量插入优化之rewriteBatchedStatements
- 基于Web的动态新闻发布系统设计与实现(含word文档)
- excel粘贴时出现故障_excel无法复制粘贴怎么办?告诉你解决方法
- Java服务端支付宝对接(详细)
- 土方回填施工方案范本_联投土方回填施工方案样本
- 01.数模竞赛论文的写作
- 打印机如何打印白色_打印机可以打印白色吗?
- 【B类】BI商业智能、大数据、Mysql、等系列课程集
- excel表格如何把含有数字的单元格筛选出来?
- Cache架构以及X86ARM @Linux平台cache eviction功能测试
- mysql 查询 唯一_Mysql中如何查询所有唯一记录