如何更新 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 应用分配当前模式的最佳做法是什么?

提前致谢

你有几个选择。

  1. 您可以咨询您的服务提供商,即您从中获得服务的服务经纪人的运营商。服务代理是设置凭据的代理,因此您可以要求他们默认包含架构。

  2. 您可以使用 cf create-service-key 创建服务密钥。服务密钥类似于服务绑定,但可以自由浮动,因此它不会附加到您的应用程序。只要服务密钥存在,它就存在。然后,您可以使用 cf cups 创建用户提供的服务,并手动设置您的应用程序所需的任何凭据或 uri。这种方法的缺点是您必须做更多的工作来管理服务信息。

  3. 您可以将当前 uri 读入您的应用程序并在创建数据源之前修改它。如果您使用 Spring 云连接器,这并不是特别容易,因为它会为您创建数据源。我不推荐使用 SCC。

    相反,您可以使用 Spring 引导 CloudFoundryVcapEnvironmentPostProcessor 和 属性 占位符来执行此操作。请参阅参考的 Javadoc 以了解其工作原理。

    另一种选择是使用 java-cvenv。这为您提供了一种获取凭证信息的简单方法,例如 URL 并使用它来创建您自己的数据源,这允许您在必要时对 URL 等内容进行细微修改。

希望对您有所帮助!