无法在 Spring 引导中从用户提供的 vcap_services 中检索凭据



我的 spring 启动应用程序在 PCF 中,因为 PCF 没有在运行时更改属性文件的选项,我试图将值放在 PCF VCAP_SERVICES - 用户提供的凭据中。

我尝试@ConfigurationProperties按照 Pivotal 和 我得到空异常。

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

我的控制器看起来像

@RestController
public class RestApiController {
@Autowired
RsTest rsTest;
public void test() {
logger.info("RSTest: "+rsTest.getUsername());
return ResponseEntity.ok().body("some value");
}

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

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

Spring Boot 将以以下格式映射绑定到您的应用程序的服务:vcap.services.<service name>.credentials.<credential-key>。有关详细信息,请参阅此处的文档。

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

下面是一个示例:

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

    {
    "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 Connectors(。

有关更多详细信息,请阅读此博客文章

相关内容

  • 没有找到相关文章

最新更新