我有一个绑定的Postgres服务到我在CF(Cloud foundry)中的弹簧应用程序 可用的 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 Boot CloudFoundryVcapEnvironmentPostProcessor和属性占位符执行此操作。请参阅引用的 Javadoc 了解其工作原理。
另一种选择是使用 java-cvenv。这为您提供了一种获取凭据信息(如 URL)并使用它来创建自己的数据源的简单方法,这允许您在必要时对 URL 等内容进行轻微修改。
希望对您有所帮助!