如何更新 cf vcaps env 中的 postgres uri 值
How to update postgres uri value in cf vcaps env
我在 CF(Cloud foundry)中为我的 spring 应用程序绑定了 Postgres 服务
可用的 VCAPS 环境如下:
"postgresql": [
{
"binding_name": null,
"credentials": {
"dbname": "JDusZ6EpE1ixbTKS",
"end_points": [
{
"host": "10.11.241.2",
"network_id": "SF",
"port": "46371"
}
],
"hostname": "10.11.241.2",
"password": "SuVzOf2m5L5oNYSG",
"port": "46371",
"ports": {
"5432/tcp": "46371"
},
"uri": "postgres://eyv6avf27X9Z55Gx:SuVzOf2m5L5oNYSG@10.11.241.2:46371/JDusZ6EpE1ixbTKS",
"username": "eyv6avf27X9Z55Gx"
},
"instance_name": "mypostgres",
"label": "postgresql",
"name": "mypostgres",
"plan": "v9.6-dev",
"provider": null,
"syslog_drain_url": null,
"tags": [
"postgresql",
"relational"
],
"volume_mounts": []
}
],
我需要修改 uri 的值以包含当前模式,我想它需要如下:
"uri": "postgres://eyv6avf27X9Z55Gx:SuVzOf2m5L5oNYSG@10.11.241.2:46371/JDusZ6EpE1ixbTKS?currentSchema=mycurrentschema"
这有可能吗?如果不是,为 spring 应用分配当前模式的最佳做法是什么?
提前致谢
你有几个选择。
您可以咨询您的服务提供商,即您从中获得服务的服务经纪人的运营商。服务代理是设置凭据的代理,因此您可以要求他们默认包含架构。
您可以使用 cf create-service-key
创建服务密钥。服务密钥类似于服务绑定,但可以自由浮动,因此它不会附加到您的应用程序。只要服务密钥存在,它就存在。然后,您可以使用 cf cups
创建用户提供的服务,并手动设置您的应用程序所需的任何凭据或 uri。这种方法的缺点是您必须做更多的工作来管理服务信息。
您可以将当前 uri 读入您的应用程序并在创建数据源之前修改它。如果您使用 Spring 云连接器,这并不是特别容易,因为它会为您创建数据源。我不推荐使用 SCC。
相反,您可以使用 Spring 引导 CloudFoundryVcapEnvironmentPostProcessor 和 属性 占位符来执行此操作。请参阅参考的 Javadoc 以了解其工作原理。
另一种选择是使用 java-cvenv。这为您提供了一种获取凭证信息的简单方法,例如 URL 并使用它来创建您自己的数据源,这允许您在必要时对 URL 等内容进行细微修改。
希望对您有所帮助!
我在 CF(Cloud foundry)中为我的 spring 应用程序绑定了 Postgres 服务 可用的 VCAPS 环境如下:
"postgresql": [
{
"binding_name": null,
"credentials": {
"dbname": "JDusZ6EpE1ixbTKS",
"end_points": [
{
"host": "10.11.241.2",
"network_id": "SF",
"port": "46371"
}
],
"hostname": "10.11.241.2",
"password": "SuVzOf2m5L5oNYSG",
"port": "46371",
"ports": {
"5432/tcp": "46371"
},
"uri": "postgres://eyv6avf27X9Z55Gx:SuVzOf2m5L5oNYSG@10.11.241.2:46371/JDusZ6EpE1ixbTKS",
"username": "eyv6avf27X9Z55Gx"
},
"instance_name": "mypostgres",
"label": "postgresql",
"name": "mypostgres",
"plan": "v9.6-dev",
"provider": null,
"syslog_drain_url": null,
"tags": [
"postgresql",
"relational"
],
"volume_mounts": []
}
],
我需要修改 uri 的值以包含当前模式,我想它需要如下:
"uri": "postgres://eyv6avf27X9Z55Gx:SuVzOf2m5L5oNYSG@10.11.241.2:46371/JDusZ6EpE1ixbTKS?currentSchema=mycurrentschema"
这有可能吗?如果不是,为 spring 应用分配当前模式的最佳做法是什么?
提前致谢
你有几个选择。
您可以咨询您的服务提供商,即您从中获得服务的服务经纪人的运营商。服务代理是设置凭据的代理,因此您可以要求他们默认包含架构。
您可以使用
cf create-service-key
创建服务密钥。服务密钥类似于服务绑定,但可以自由浮动,因此它不会附加到您的应用程序。只要服务密钥存在,它就存在。然后,您可以使用cf cups
创建用户提供的服务,并手动设置您的应用程序所需的任何凭据或 uri。这种方法的缺点是您必须做更多的工作来管理服务信息。您可以将当前 uri 读入您的应用程序并在创建数据源之前修改它。如果您使用 Spring 云连接器,这并不是特别容易,因为它会为您创建数据源。我不推荐使用 SCC。
相反,您可以使用 Spring 引导 CloudFoundryVcapEnvironmentPostProcessor 和 属性 占位符来执行此操作。请参阅参考的 Javadoc 以了解其工作原理。
另一种选择是使用 java-cvenv。这为您提供了一种获取凭证信息的简单方法,例如 URL 并使用它来创建您自己的数据源,这允许您在必要时对 URL 等内容进行细微修改。
希望对您有所帮助!