如何在Java代码中使用SAP云平台CloudFoundry环境的环境变量

本文使用的例子源代码在我的github上。

在我的公众号文章在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务介绍了如何通过Cloud Connector连接ABAP On-Premise系统。

我创建了三个service的实例,详情如上图和下表:

服务类型

服务实例名称

connectivity

connectivity-jerry-demo

destination

jerry-destination-lite

xsuaa

xsuaa-jerry-demo

这三个服务实例的名称维护在应用的manifest.xml中。

将应用使用cf push部署到CloudFoundry之后,在Cockpit里能观察到生成的系统变量VCAP_SERVICES:

在Java代码里,使用如下代码将该环境变量的值读取出来存储到字符串中。

private static final String VCAP_SERVICES = System.getenv("VCAP_SERVICES");

该Json对象的具体字段通过getJSONObject读取出来。

下图是connectivity实例的credentials明细:

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

附录

VCAP_SERVICES全部内容:

{
	"VCAP_SERVICES": {
		"xsuaa": [
			{
				"name": "xsuaa-jerry-demo",
				"instance_name": "xsuaa-jerry-demo",
				"binding_name": null,
				"credentials": {
					"uaadomain": "authentication.eu10.hana.ondemand.com",
					"tenantmode": "dedicated",
					"sburl": "https://internal-xsuaa.authentication.eu10.hana.ondemand.com",
					"clientid": "sb-connectivity-jerry-demo!t3704",
					"verificationkey": "-----BEGIN PUBLIC KEY-----MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwThn6OO9kj0bchkOGkqYBnV1dQ3zU/xtj7Kj7nDd8nyRMcEWCtVzrzjzhiisRhlrzlRIEY82wRAZNGKMnw7cvCwNixcfcDJnjzgr2pJ+5/yDZUc0IXXyIWPZD+XdL+0EogC3d4+fqyvg/BF/F0t2hKHWr/UTXE6zrGhBKaL0d8rKfYd6olGWigFd+3+24CKI14zWVxUBtC+P9Fhngc9DRzkXqhxOK/EKn0HzSgotf5duq6Tmk9DCNM4sLW4+ERc6xzrgbeEexakabvax/Az9WZ4qhwgw+fwIhKIC7WLwCEJaRsW4m7NKkv+eJR2LKYesuQ9SVAJ3EXV86RwdnH4uAv7lQHsKURPVAQBlranSqyQu0EXs2N9OlWTxe+FyNkIvyZvoLrZl/CdlYc8AKxRm5rn2/88nkrYQ0XZSrnICM5FRWgVF2hn5KfZGwtBN85/D4Yck6B3ocMfyX7e4URUm9lRPQFUJGTXaZnEIge0R159HUwhTN1HvyXrs6uT1ZZmW+c3p47dw1+LmUf/hIf8zd+uvHQjIeHEJqxjqfyA8yqAFKRHKVFrwnwdMHIsRap2EKBhHMfeVf0P2th5C9MggYoGCvdIaIUgMBX3TtCdvGrcWML7hnyS2zkrlA8SoKJnRcRF2KxWKs355FhpHpzqyZflO5l98+O8wOsFjGpL9d0ECAwEAAQ==-----END PUBLIC KEY-----",
					"xsappname": "connectivity-jerry-demo!t3704",
					"identityzone": "jerry",
					"identityzoneid": "f3bd7f84-ebf1-4c11-b7c7-a278ebd54dcb",
					"clientsecret": "WAxzZxYQCgB7Dkml8dFdU+kaLSE=",
					"tenantid": "f3bd7f84-ebf1-4c11-b7c7-a278ebd54dcb",
					"url": "https://jerry.authentication.eu10.hana.ondemand.com"
				},
				"syslog_drain_url": null,
				"volume_mounts": [],
				"label": "xsuaa",
				"provider": null,
				"plan": "application",
				"tags": [
					"xsuaa"
				]
			}
		],
		"connectivity": [
			{
				"name": "connectivity-jerry-demo",
				"instance_name": "connectivity-jerry-demo",
				"binding_name": null,
				"credentials": {
					"uaadomain": "authentication.eu10.hana.ondemand.com",
					"onpremise_proxy_port": "20003",
					"tenantmode": "dedicated",
					"clientid": "sb-clone5282c913c9164bb284239adcc4d74210!b3704|connectivity!b17",
					"verificationkey": "-----BEGIN PUBLIC KEY-----MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwThn6OO9kj0bchkOGkqYBnV1dQ3zU/xtj7Kj7nDd8nyRMcEWCtVzrzjzhiisRhlrzlRIEY82wRAZNGKMnw7cvCwNixcfcDJnjzgr2pJ+5/yDZUc0IXXyIWPZD+XdL+0EogC3d4+fqyvg/BF/F0t2hKHWr/UTXE6zrGhBKaL0d8rKfYd6olGWigFd+3+24CKI14zWVxUBtC+P9Fhngc9DRzkXqhxOK/EKn0HzSgotf5duq6Tmk9DCNM4sLW4+ERc6xzrgbeEexakabvax/Az9WZ4qhwgw+fwIhKIC7WLwCEJaRsW4m7NKkv+eJR2LKYesuQ9SVAJ3EXV86RwdnH4uAv7lQHsKURPVAQBlranSqyQu0EXs2N9OlWTxe+FyNkIvyZvoLrZl/CdlYc8AKxRm5rn2/88nkrYQ0XZSrnICM5FRWgVF2hn5KfZGwtBN85/D4Yck6B3ocMfyX7e4URUm9lRPQFUJGTXaZnEIge0R159HUwhTN1HvyXrs6uT1ZZmW+c3p47dw1+LmUf/hIf8zd+uvHQjIeHEJqxjqfyA8yqAFKRHKVFrwnwdMHIsRap2EKBhHMfeVf0P2th5C9MggYoGCvdIaIUgMBX3TtCdvGrcWML7hnyS2zkrlA8SoKJnRcRF2KxWKs355FhpHpzqyZflO5l98+O8wOsFjGpL9d0ECAwEAAQ==-----END PUBLIC KEY-----",
					"xsappname": "clone5282c913c9164bb284239adcc4d74210!b3704|connectivity!b17",
					"identityzone": "jerry",
					"clientsecret": "nyiGD9QQSOZO+NTeEJdexWWjxYY=",
					"tenantid": "f3bd7f84-ebf1-4c11-b7c7-a278ebd54dcb",
					"url": "https://jerry.authentication.eu10.hana.ondemand.com",
					"onpremise_proxy_host": "10.0.85.1"
				},
				"syslog_drain_url": null,
				"volume_mounts": [],
				"label": "connectivity",
				"provider": null,
				"plan": "lite",
				"tags": [
					"connectivity",
					"conn",
					"connsvc"
				]
			}
		],
		"destination": [
			{
				"name": "jerry-destination-lite",
				"instance_name": "jerry-destination-lite",
				"binding_name": null,
				"credentials": {
					"uaadomain": "authentication.eu10.hana.ondemand.com",
					"tenantmode": "dedicated",
					"clientid": "sb-clone39a01503ac1845fbbda5d5ffccb1a469!b3704|destination-xsappname!b404",
					"instanceid": "39a01503-ac18-45fb-bda5-d5ffccb1a469",
					"verificationkey": "-----BEGIN PUBLIC KEY-----MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwThn6OO9kj0bchkOGkqYBnV1dQ3zU/xtj7Kj7nDd8nyRMcEWCtVzrzjzhiisRhlrzlRIEY82wRAZNGKMnw7cvCwNixcfcDJnjzgr2pJ+5/yDZUc0IXXyIWPZD+XdL+0EogC3d4+fqyvg/BF/F0t2hKHWr/UTXE6zrGhBKaL0d8rKfYd6olGWigFd+3+24CKI14zWVxUBtC+P9Fhngc9DRzkXqhxOK/EKn0HzSgotf5duq6Tmk9DCNM4sLW4+ERc6xzrgbeEexakabvax/Az9WZ4qhwgw+fwIhKIC7WLwCEJaRsW4m7NKkv+eJR2LKYesuQ9SVAJ3EXV86RwdnH4uAv7lQHsKURPVAQBlranSqyQu0EXs2N9OlWTxe+FyNkIvyZvoLrZl/CdlYc8AKxRm5rn2/88nkrYQ0XZSrnICM5FRWgVF2hn5KfZGwtBN85/D4Yck6B3ocMfyX7e4URUm9lRPQFUJGTXaZnEIge0R159HUwhTN1HvyXrs6uT1ZZmW+c3p47dw1+LmUf/hIf8zd+uvHQjIeHEJqxjqfyA8yqAFKRHKVFrwnwdMHIsRap2EKBhHMfeVf0P2th5C9MggYoGCvdIaIUgMBX3TtCdvGrcWML7hnyS2zkrlA8SoKJnRcRF2KxWKs355FhpHpzqyZflO5l98+O8wOsFjGpL9d0ECAwEAAQ==-----END PUBLIC KEY-----",
					"xsappname": "clone39a01503ac1845fbbda5d5ffccb1a469!b3704|destination-xsappname!b404",
					"identityzone": "jerry",
					"clientsecret": "QCnO+2k8gvUkdTyiCZI5rhzylbQ=",
					"tenantid": "f3bd7f84-ebf1-4c11-b7c7-a278ebd54dcb",
					"uri": "https://destination-configuration.cfapps.eu10.hana.ondemand.com",
					"url": "https://jerry.authentication.eu10.hana.ondemand.com"
				},
				"syslog_drain_url": null,
				"volume_mounts": [],
				"label": "destination",
				"provider": null,
				"plan": "lite",
				"tags": [
					"destination",
					"document"
				]
			}
		],
		"application-logs": [
			{
				"name": "jerry-log",
				"instance_name": "jerry-log",
				"binding_name": null,
				"credentials": {},
				"syslog_drain_url": "https://10.0.104.16:4433/syslogv2/ZmE4OTNmMjYtNjllZS00YTRhLWFhMDQtOGY4YWUwNjc2NDc1L2Nvbm5lY3Rpdml0eS1qZXJyeS1kZW1vLzY5YWJmZDQ2LWQyMjgtNDkwMy1iMjQ1LWRlODhjZWZmMzY0Mi9kZXYvMDE2ZGUwODktMDc0MS00NzlhLTgyOGEtNDVjNGVmMTY5MzUyL0kwNDI0MTZ0cmlhbF9qZXJyeS8wNWMyYzY0Ny1lYjYwLTQwYjQtYjhiYi02NTEyYTBlZmQ2NjIvYXBwbGljYXRpb24tbG9ncy8zZTQ2NmZjNi04MzNlLTQzMGEtYTVhMS1iOWFhMjMxOTUwYzgvbGl0ZS81MWYzYWE3Mi1lYzE4LTQ4YTgtYTVjNS1lNGJlMWVlMDQ2MTUvamVycnktbG9nLzA3Y2MwOWZlZTFmM2VjNDNhYWIzZmMzMTAwMzQ5NTMwYmIzMjJmODE0NDE1ZGI3MTBkM2JlM2NmMDliNTI4Mjc",
				"volume_mounts": [],
				"label": "application-logs",
				"provider": null,
				"plan": "lite",
				"tags": []
			}
		]
	}
}
{
	"VCAP_APPLICATION": {
		"cf_api": "https://api.cf.eu10.hana.ondemand.com",
		"limits": {
			"fds": 16384,
			"mem": 512,
			"disk": 1024
		},
		"application_name": "connectivity-jerry-demo",
		"application_uris": [
			"connectivity-jerry-demo-i042416.cfapps.eu10.hana.ondemand.com"
		],
		"name": "connectivity-jerry-demo",
		"space_name": "dev",
		"space_id": "69abfd46-d228-4903-b245-de88ceff3642",
		"uris": [
			"connectivity-jerry-demo-i042416.cfapps.eu10.hana.ondemand.com"
		],
		"users": null,
		"application_id": "fa893f26-69ee-4a4a-aa04-8f8ae0676475",
		"version": "d964d7cc-e067-4810-b834-25c995fe1bc5",
		"application_version": "d964d7cc-e067-4810-b834-25c995fe1bc5"
	}
}

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏不会写文章的程序员不是好厨师

ClassNotFoundException,NoClassDefFoundError,NoSuchMethodError排查

在使用java开发的过程中时常会碰到以上三个错误,其中NoClassDefFoundError、NoSuchMethodError两个error遭遇得会多一些。...

943
来自专栏程序员的酒和故事

跟Google学写代码--Chromium/base--windows_version源码学习及应用

Chromium是一个伟大的、庞大的开源工程,很多值得我们学习的地方。 前面写道: 《跟Google学写代码–Chromium/base–stl_util源...

3427
来自专栏烙馅饼喽的技术分享

我的CMS开发记-3 只要是人就会犯错误,只要是软件就会有BUG,即使他是nhibernate

      nhibernate1.2支持access数据库。但是我一直在用sqlserver开发。现在已经有了一点样子,于是我心血来潮,将数据库切换为Acce...

2768
来自专栏后端程序员的自我修养

CPython源码阅读笔记(1)

目前 CPython 的开发已经迁移到了 Github 上,可以直接去 Github clone 对应的分支。 我们将基于 Python 2.7.13 版本, ...

931
来自专栏数据结构与算法

1098 均分纸牌

1098 均分纸牌 2002年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解 题目描述 D...

3188
来自专栏张戈的专栏

分享博客统计中的动态运行天数代码

快到博主恋爱纪念日了,本来是打算做一个恋爱时间统计功能来小小的罗曼蒂克一下,类似于 已相恋 **年 **天 **小时 **分 **秒,当我找到让时间差转成年月日...

38110
来自专栏丑胖侠

Drools决策表的使用

Drools 决策表的使用 决策表简介 引用官方的话 决策表是一个“精确而紧凑的”表示条件逻辑的方式,非常适合商业级别的规则。 目前决策表支持xls格...

27210
来自专栏CDA数据分析师

SAS | 如何网络爬虫抓取网页数据

本人刚刚完成SAS正则表达式的学习,初学SAS网络爬虫,看到过一些前辈大牛们爬虫程序,感觉很有趣。现在结合实际例子,浅谈一下怎么做一些最基本的网页数据抓取。第一...

2428
来自专栏飞雪无情的博客

Android Gradle实用技巧(二) | 自动生成版本信息

每一个App都会有一个版本号,这样用户就知道自己安装的应用是哪个版本,是不是最新版,有了问题,也可以找客服报上自己的版本,让客服有针对性的帮用户解决问题。

813
来自专栏安恒网络空间安全讲武堂

RCE+OOB+一道HCTF实战

两则需要知道的RCE实战trick RCE-trick1 前言 想必大家遇到RCE的题目不算少数,那么如果题目可以命令执行,却没有回显,那么我们应该如何有效打击...

23410

扫码关注云+社区