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

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

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

相关文章

js find的用法_React常用库Immutable.js常用API

JavaScript 中的对象一般是可变的(Mutable),因为使用了引用赋值,新的对象简单的引用了原始对象,改变新的对象将影响到原始对象。如 foo{a: 1}; barfoo; bar.a2 你会发现此时 foo.a 也被改成了 2。虽然这样做可以节约内存,但当应用…

教学案例 计算机,计算机教学案例

海量优秀的免费计算机教学案例范文供您参考与下载,关于计算机教学案例的免费论文范文参考资料是由2016年最新的相关论文题目按照标准论文格式模板写作的,适合不知道怎么写计算机教学案例的大学毕业生,对相关的本科论文和硕士毕业论文及职称论文发表写作有参考价值&a…

java 开发:md5_Java社区调查结果:74%的开发人员希望减少详细程度

java 开发:md5一个新的JDK增强建议(JEP)在Java社区中风起云涌:JEP286。该建议建议在Java的未来版本中引入局部变量类型推断,以简化Java应用程序的编写。 在下面的文章中,我们将解释它的含义以及它将如何影响您的代码。…

python获取当前目录_又有几个Python小技巧分享

今天这篇文章为大家带来几个Python使用的小技巧:快速生成依赖文件文件路径处理通过set将对象去重单元测试unitest捕获异常快速生成依赖文件Python通过requirements.txt来管理项目所依赖的库,通过pip install -r requirements.txt命令可以直接安装项目所需…

计算机弹歌曲做我老婆好不好,做我老婆好不好吉他谱(图片谱,指弹,做我老婆好不好,徐誉滕)_徐誉滕(徐海;徐歆舜)...

做我老婆好不好词曲:徐誉滕演唱:徐誉滕走过多少路口 听过多少叹息我认真着你的不知所措这种迷茫心情 我想谁都会有幸运的是能分担你的愁能不能靠近一点 能不能再近一点满足我心中小小的虚荣其实你并不知道 在我心中你最美就像风雨过后天边的那道彩虹如果…

python敏感字替换_python用类实现文章敏感词的过滤方法示例

过滤一遍并将敏感词替换之后剩余字符串中新组成了敏感词语,这种情况就要用递归来解决,直到过滤替换之后的结果和过滤之前一样时才算结束 第一步:建立一个敏感词库(.txt文本)第二步:编写代码在文章中过滤敏感词(递归实现) # -*- coding: utf-8 -*- # author 代序春秋…

2018年冷链百强_在分析了47,251个依赖关系之后,2016年Java图书馆百强

2018年冷链百强谁在上面,谁在后面? 我们分析了Github上的47,251个依赖关系,并抽取了前100个Java库 对于长周末而言,我们最喜欢的消遣是浏览Github并搜索流行的Java库。 我们决定与您分享乐趣和信息。 我们分析了Github上前3,862…

【FFMPEG应用篇】基于FFmpeg的封装格式转换

/* * 一笑奈何 * cn-yixiaonaihe.blog.csdn.net */#include <iostream> #include <thread> extern "C" { #include "libavformat/avformat.h" #include "libavcodec/avcodec.h" #include "libswscale/swscale.h" #inc…

计算机键盘标注,电脑键盘上怎么打√和×

用电脑键盘上打出√和两个符号的方法1、在输入法开启状态下&#xff0c;鼠标右键点击输入法状态栏上面的“软键盘图标”&#xff0c;然后选择“数学符号”(直接右击打不开就先左击再右击)。2、在数学符号的软键盘面板上直接用鼠标点击“√和”就好(光标要定位在需要输入的地方)…

python中运算符号怎样表示_Python中的运算符与表达式

你所编写的大多数语句&#xff08;逻辑行&#xff09;都包含了表达式&#xff08;Expressions&#xff09;。一个表达式的简单例子便是 23。表达式可以拆分成运算符&#xff08;Operators&#xff09;与操作数&#xff08;Operands&#xff09;。 运算符&#xff08;Operators&…

web服务优化与健壮性改进_创建健壮的微服务架构所涉及的组件

web服务优化与健壮性改进在本文中&#xff0c;我们将简要学习构建强大的微服务应用程序所需的各种软件组件。 在简要了解每个架构组件之前&#xff0c;我们将陈述设计微服务架构时出现的一般查询。 1.微服务架构组件 每当我们创建微服务应用程序时&#xff0c;我们都会想到以下…

计算机对油画的影响,现代电脑美术影响下的油画艺术创作

摘要&#xff1a;"21世纪的文盲不是不识字,而是不会读图."随着视觉文化和电脑网络的快速发展,计算机技术也广泛地涵盖了整个意识形态领域.图像已成为这个时代的最大资源,我们已经快速进入"读图时代".九十年代起,计算机图形艺术在科技的带动下飞速发展,电脑…

【FFMPEG应用篇】基于FFmpeg的RGB格式封装MOV文件

/* * 一笑奈何 * cn-yixiaonaihe.blog.csdn.net */#include <iostream> #include <thread> extern "C" { #include "libavformat/avformat.h" #include "libavcodec/avcodec.h" #include "libswscale/swscale.h" #inc…

python launcher卸载后蓝屏_误卸载python2.4导致yum不能用后的修复

去 http://mirrors.ustc.edu.cn/centos/或者镜像下载如下包&#xff0c;版本不一定非常一致 python-2.4.3-56.el5.x86_64.rpm python-devel-2.4.3-56.el5.i386.rpm python-devel-2.4.3-56.el5.x86_64.rpm python-iniparse-0.2.3-6.el5.noarch.rpm python-libs-2.4.3-56.el5.x86…

owin 怎么部署在云中_使用Boxfuse轻松在云中运行Spring Boot应用程序

owin 怎么部署在云中几天前&#xff0c;我开始构建一个将使用REST API检索和存储数据的iOS应用。 该REST API将是我也必须构建的服务器应用程序。 由于我熟悉Java和Spring &#xff0c;因此决定使用Spring Boot作为框架。 为了能够在我的iPhone上使用它&#xff0c;如果我可以在…

【FFMPEG应用篇】基于FFmpeg的PCM数据编码为AAC

/* * 一笑奈何 * cn-yixiaonaihe.blog.csdn.net */#include <iostream> #include <thread> extern "C" { #include "libavformat/avformat.h" #include "libavcodec/avcodec.h" #include "libswscale/swscale.h" #inc…

计算机过程控制系统实例ppt,chap7 前馈控制系统_武汉理工大学:调节仪表与过程控制系统_ppt_大学课件预览_高等教育资讯网...

第七章 前馈及复合控制系统其他反馈控制的缺点&#xff1a;无法将干扰克服在被控制量偏离设计值之前。被控对象总是存在一定的纯滞后和容量滞后&#xff0c;故限制了控制作用的充分发挥。 7-1 基本概念1、问题的提出2、技术思路直接按扰动而不是按偏差进行控制。干扰发生后&…

用python画时序图源代码_使用python实现画AR模型时序图

背景&#xff1a; 用python画AR模型的时序图。 结果&#xff1a;代码&#xff1a; import numpy as np import matplotlib.pyplot as plt """ AR(1)的时序图&#xff1a;x[t]a*x[t-1]e """ num 2000 e np.random.rand(num) x np.empty(num) &…

属性拼接转换成字符串_使用一些可选的将字符串配置属性转换为其他类型

属性拼接转换成字符串有一天&#xff0c;您遇到一些代码&#xff0c;并认为这很漂亮&#xff0c;为什么我没有想到呢&#xff1f; 因此&#xff0c;我的长期同事Mark Warner在使用方法引用处理从String进行转换的标准名称/值存储模式方面有一个不错的选择。 int size store.g…

【FFMPEG应用篇】基于FFmpeg的PCM和RGB数据统一封装

项目采用工程模式进行构造。 技术解决难点&#xff1a; 1.编码后的PTS时间一定要赋值。2.音视频封装同步问题&#xff0c;其中涉及到PTS同步问题&#xff0c;例如视频25PTS/s 音频43PTS/s&#xff08;44100采样率/1024每帧&#xff09;&#xff0c;音频要慢于视频所以这种情…