代码之家  ›  专栏  ›  技术社区  ›  Blunti

访问PCF Spring Boot app上的VCAP属性

  •  0
  • Blunti  · 技术社区  · 7 年前

    目前,我使用系统.getenv:

    JSONObject vcapServices = new JSONObject(System.getenv("VCAP_SERVICES"));
    JSONArray rabbitmq = (JSONArray) vcapServices.get("p-rabbitmq");
    JSONObject serviceInfo = (JSONObject) rabbitmq.get(0);
    JSONObject credentials = (JSONObject) serviceInfo.get("credentials");
    
    hostname = credentials.getString("hostname");
    virtualHost = credentials.getString("vhost");
    username = credentials.getString("username");
    password = credentials.getString("password");
    

    @Value("${vcap.services.p-rabbitmq.credentials.hostname}")
    private String hostname;
    

    但我还没能抓住价值观。

    有没有办法通过@Value注释访问VCAP变量?还是有更好的方法系统.getenv在部署应用程序后从PCF获取这些凭据?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Daniel Mikusa    5 年前

    有没有办法通过@Value注释访问VCAP变量?

    是的,我想你需要稍微改变一下你的格式。它是 vcap.services.<service-instance-name>.credentials.hostname . 您有服务提供者本身的名称,而不是服务实例的名称。我在上面的例子中看不到这个名字,但是我发现Javadoc很有用。它列出了以下示例。

    VCAP_SERVICES: {
        "rds-mysql-1.0": [
            {
                "credentials": {
                    "host": "mysql-service-public.clqg2e2w3ecf.us-east-1.rds.amazonaws.com",
                    "hostname": "mysql-service-public.clqg2e2w3ecf.us-east-1.rds.amazonaws.com",
                    "name": "d04fb13d27d964c62b267bbba1cffb9da",
                    "password": "pxLsGVpsC9A5S",
                    "port": 3306,
                    "user": "urpRuqTf8Cpe6",
                    "username": "urpRuqTf8Cpe6"
                },
                "label": "rds-mysql-1.0",
                "name": "mysql",
                "plan": "10mb"
            }
        ]
    }
    

    前任: vcap.services.mysql.credentials.host

    https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/cloud/CloudFoundryVcapEnvironmentPostProcessor.html


    更新

    java-cfenv 是今后访问服务属性的推荐方法。它与弹簧靴的配合更为出色,而且一丝不苟。


    另一个需要考虑的选择是 Spring Cloud Connectors

    前任:

    @Bean
    public RabbitConnectionFactory rabbitFactory() {
        return connectionFactory().rabbitConnectionFactory();
    }
    

    Getting Started 如果你有兴趣的话。

    推荐文章