gpt4 book ai didi

java - 无法在 Spring Boot 中从 vcap_services 中用户提供的凭据检索

转载 作者:行者123 更新时间:2023-12-02 01:26:23 28 4
gpt4 key购买 nike

我的 Spring Boot 应用程序位于 PCF 中,由于 PCF 没有在运行时更改属性文件的选项,因此我尝试将这些值放入 PCF VCAP_SERVICES-用户提供的凭据中。

我尝试按照关键和提供的教程使用@ConfigurationProperties我得到了空异常。

@Data
@Configuration
@ConfigurationProperties("vcap.services.app-properties.credentials")
public class RsTest {
private String username;
private String password;
//getter and setter
};

我的 Controller 看起来像

@RestController
public class RestApiController {
@Autowired
RsTest rsTest;

public void test() {
logger.info("RSTest: "+rsTest.getUsername());
return ResponseEntity.ok().body("some value");
}

我期待 RsTest 对象中的凭据。但有错误路径 [/myservice] 上下文中 servlet [dispatcherServlet] 的 Servlet.service() 抛出异常2019-08-20T17:32:43.728-04:00 [APP/PROC/WEB/0] [OUT] java.lang.NullPointerException: null

最佳答案

嗯,理论上你所拥有的应该有效。不过,从 VCAP_SERVICES 解析配置的方法很脆弱,这就是我猜测您遇到问题的原因。 @ConfigurationProperties 的前缀必须完全正确,Spring 才能查找该值,并且前缀将取决于您绑定(bind)的服务的名称。

Spring Boot 将以以下格式映射绑定(bind)到您的应用程序的服务:vcap.services.<service name>.credentials.<credential-key> 。详情见the docs here .

如果您没有正确的服务实例名称,那么它将无法绑定(bind)到您的配置属性对象。

这是一个例子:

  1. 我有一个名为 scheduler 的服务.
  2. 它生成以下 VCAP_SERVICES 环境变量:

    {
    "scheduler-for-pcf": [
    {
    "binding_name": null,
    "credentials": {
    "api_endpoint": "https://scheduler.run.pivotal.io"
    },
    "instance_name": "scheduler",
    "label": "scheduler-for-pcf",
    "name": "scheduler",
    "plan": "standard",
    "provider": null,
    "syslog_drain_url": null,
    "tags": [
    "scheduler"
    ],
    "volume_mounts": []
    }
    ]
    }
  3. 我可以使用以下类来读取它的凭据。

    @Configuration
    @ConfigurationProperties(prefix = "vcap.services.scheduler.credentials")
    public class SchedulerConfig {
    private String api_endpoint;

    public String getApiEndpoint() {
    return api_endpoint;
    }

    public void setApiEndpoint(String api_endpoint) {
    this.api_endpoint = api_endpoint;
    }
    }

如果我将服务名称更改为 fred ,那么前缀需要更改为 vcap.services.fred.credentials .

<小时/>

话虽如此,您应该考虑使用 java-cfenv反而。它更灵活,是在 Java 应用程序中读取 VCAP_SERVICES 的推荐方法(注意 - 这取代了 Spring Cloud Connector)。

有关更多详细信息,请阅读 this blog post

关于java - 无法在 Spring Boot 中从 vcap_services 中用户提供的凭据检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57581982/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com