当前位置: 首页 > 知识库问答 >
问题:

访问PCF Spring Boot应用程序上的VCAP属性

苏健柏
2023-03-14
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环境变量,如下所示:

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

但我还没能抓住价值。

有没有什么方法可以通过@value注释访问VCAP变量?或者除了System.getEnv之外,是否有更好的方法在我部署应用程序后从PCF获取这些凭据?

共有1个答案

锺离烈
2023-03-14

有没有什么方法可以通过@value注释访问VCAP变量?

是的,我想你需要稍微改变一下你的格式。它是vcap.services. .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"
        }
    ]
}

在本例中,服务提供程序名称为“rds-mysql-1.0”,与示例中的“p-rabbitmq”相同。然后它有一个服务实例名“mysql”&这是您在属性占位符中使用的名称。

更新

Spring Cloud Connectors仍然是一个选项,下面将其留给历史上下文,但java-cfenv是今后访问服务属性的推荐方法。它与Spring靴更好的发挥,是每一点都一样的能力。

已弃用

@Bean
public RabbitConnectionFactory rabbitFactory() {
    return connectionFactory().rabbitConnectionFactory();
}
 类似资料:
  • 亲爱的,我已经部署了如下示例服务: 当我执行get nodes-o wide时,如下所示, 任何帮助。谢了。

  • 我的spring boot应用程序中目前只有两个类。第一个是main主引导应用程序类,另一个是服务类。我在应用程序类中声明了如下属性源文件: 其他类是FTPService,其中属性值in使用@value,如下所示: 它打印空。也尝试用下面的注释来注释FTPService,但不起作用。尝试将属性复制到Application.properties,但不起作用。 我的属性文件在src/main/reso

  • 我是kubernetes的新手,我尝试使用Kubernete运行小型应用程序。我创建了docker镜像并使用minikube运行它。所以应用程序非常简单,它只打印hello world。 我的dockerfile文件: deployment.yaml 我运行命令: 创建deployment.yaml 输出是: 服务/myhelloworldservice已创建 创建的部署.apps/我的问候世界

  • 我正在尝试将我的JavaSpring Boot Web应用程序部署到Heroku。 要在本地启动它,我运行: 然后 因此,我为Heroku创建了Procfile: 我使用Heroku-Github集成,应用程序从Github部署到Heroku。所以我就把它推到那里。 但应用程序不会启动。 给我: 不显示目录。 我认为Heroku没有构建这个应用程序。但是我做错了什么?提前感谢您的建议!

  • 当前目录的Spring Boot多上下文问题 在Spring Boot文档应用程序属性文件中 null 在和模块的PluginContext中不可见,只能在中可见,因为它是root,但当前目录在哪里?当前目录是什么意思? 是否可以从自己的模块将包含到PluginContext中,而不需要其他配置(通过或外部配置)?

  • 来自OpenJDK的Dockerfile:8-jdk-alpine ADD target/.war admin_portal.war ENTRYPOINT[“java”,“-jar”,“admin_portal.war”]来自OpenJDK的Dockerfile:8-jdk-alpine ADD target/.war ui_app.war ENTRYPOINT[“java”,“-jar”,“ui