将Spring Boot应用程序绑定到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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353329.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab里插入行和列

matlab里插入行和列>> Amagic(4)A 16 2 3 135 11 10 89 7 6 124 14 15 1>> b1:4b 1 2 3 4>> C[A(1:2,:) ; b ; A(3:end,:)] % 行向量b插入第2行和第3行之间C 16 2 3 135 11 10 …

博弈问题及SG函数(真的很经典)

博弈问题 若你想仔细学习博弈论,我强烈推荐加利福尼亚大学的Thomas S. Ferguson教授精心撰写并免费提供的这份教材,它使我受益太多。(如果你的英文水平不足以阅读它,我只能说,恐怕你还没到需要看“博弈论”的时候。&am…

luogu P1519 穿越栅栏 Overfencing

题目描述 描述 农夫John在外面的田野上搭建了一个巨大的用栅栏围成的迷宫。幸运的是,他在迷宫的边界上留出了两段栅栏作为迷宫的出口。更幸运的是,他所建造的迷宫是一个“完美的”迷宫:即你能从迷宫中的任意一点找到一条走出迷宫的路。给定迷…

Matlab reshape重新排布数组

使用reshape需要保证前后调整后的元素个数一致,否则会报错

hibernate关联映射_具有关联映射的Hibernate Composite ID

hibernate关联映射最近,我们面临着带有复合id字段的Hibernate关联映射的棘手情况。 我们需要与一对一和多对一进行双向关联。我们的拖曳表是“ REPORT”和“ REPORT_SUMMARY”,它们之间具有从REPORT到REPORT_SUMMARY的一对多关系,而从REPORT_…

css实现简单的告警提示动画效果

需求&#xff1a;css实现简单的告警提示动画效果&#xff0c;当接收到实时信息的时候&#xff0c;页面弹出告警信息的动画效果<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>css实现告警提示动画</…

博弈-sg函数的原理和优化(hdu-1536)

sg函数&#xff1a;sg函数是博弈中的确定一个position性质的一个函数&#xff0c;全称是sprague-grundy。性质1&#xff1a;对于所有的p-position&#xff0c;都有sg 0&#xff1b;对于所有的n-position都有sg &#xff01; 0&#xff1b; 性质2&#xff1a;某点a的sg函数的值…

java项目中Classpath路径到底指的是哪里?

1、src不是classpath, WEB-INF/classes,lib才是classpath&#xff0c;WEB-INF/ 是资源目录, 客户端不能直接访问。 2、WEB-INF/classes目录存放src目录java文件编译之后的class文件&#xff0c;xml、properties等资源配置文件&#xff0c;这是一个定位资源的入口。 3、引用clas…

程序员的八个级别

2009年4月6日 陈皓 在面试时&#xff0c;你可能会被经常问到“在未来5年&#xff0c;你想干什么&#xff1f;”&#xff0c;这可能是一个比较难回答的问题。在中国&#xff0c;答案一般可能会是Team leader&#xff0c;Manager&#xff0c;或是Architect&#xff0c;Specialist…

一个具有Spring Boot,Spring Security和Stormpath的简单Web应用程序-15分钟

建筑物身份管理&#xff0c;包括身份验证和授权&#xff1f; 尝试Stormpath&#xff01; 我们的REST API和强大的Java SDK支持可以消除您的安全风险&#xff0c;并且可以在几分钟内实现。 注册 &#xff0c;再也不会建立auth了&#xff01; 更新 &#xff1a;我们最近发布了对…

Matlab各种分布的函数

正态分布&#xff1a;norm二项分布&#xff1a;bino卡方分布&#xff1a;chi2指数分布&#xff1a;exp柏松分布&#xff1a;poiss随机数&#xff1a;rnd密度函数&#xff1a;pdf累积概率&#xff1a;cdf逆累积分布&#xff1a;icdf&#xff0c;inv参数估计&#xff1a;fit对应组…

Python的配置文件模块yaml的使用

转自&#xff1a;君惜丶 简述 和GNU一样&#xff0c;YAML是一个递归着说“不”的名字。不同的是&#xff0c;GNU对UNIX说不&#xff0c;YAML说不的对象是XML。 YAML不是XML。 为什么不是XML呢&#xff1f;因为&#xff1a; YAML的可读性好。YAML和脚本语言的交互性好。YAML使用…

Matlab各种排序函数

sortsortrows 把整行的数据看作一个整体&#xff0c;对数据进行排序issorted, 判断是否已经排序了

位运算实例(一):判断奇偶性

同样一个问题&#xff0c;位运算可以提高程序的运行效率。 下面讲一下关于奇偶性的判断。 常规方法 public static boolean isOdd(int i){ return i % 2 ! 0; } 位运算方法 public static boolean isOdd(int i){ return (i & 1) ! 0; } 说明&#xff1a; 我们知道计算机中的…

Spring Security原理与应用

Spring Security是什么 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean&#xff08;注&#xff1a;包括认证与权限获取、配置、处理相关实例&#xff09;&#xff0c;充分利…

javafx2_JavaFX 2 GameTutorial第5部分

javafx2介绍 这是与JavaFX 2 Game Tutorial相关的六部分系列的第五部分。 我知道自从我写关于游戏的博客以来已经有很长时间了&#xff0c;但希望您仍然与我在一起。 如果您想回顾一下&#xff0c;请阅读第1部分 &#xff0c; 第2 部分 &#xff0c; 第3 部分和第4 部分 &#…

Matlab各种最值问题

最大最小maxmin求多个最小值,并返回其位置[B,ind] sort(A);B(1:n);前n个最小值ind(1:n);前n个最小值的位置

最长递增子序列问题的求解

最长递增子序列问题是一个很基本、较常见的小问题&#xff0c;但这个问题的求解方法却并不那么显而易见&#xff0c;需要较深入的思考和较好的算法素养才能得出良好的算法。由于这个问题能运用学过的基本的算法分析和设计的方法与思想&#xff0c;能够锻炼设计较复杂算法的思维…

史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)(Finchley版本)

转载请标明出处&#xff1a; 原文首发于&#xff1a;https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f2-ribbon/ 本文出自方志朋的博客 在上一篇文章&#xff0c;讲了服务的注册和发现。在微服务架构中&#xff0c;业务都会被拆分成一个独立的服务&#xff0c;服务与服…