簡體   English   中英

在春季啟動中無法從vcap_services中提供的用戶中檢索憑證

[英]Unable to retrieve credentials from user-provided in vcap_services in 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
};

我的控制器看起來像

@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:空

好吧,理論上您應該擁有什么。 但是,這是一種從VCAP_SERVICES解析配置的脆弱方法,這就是我猜測為什么會有問題的原因。 @ConfigurationProperties的前綴必須完全正確,以使Spring可以查找該值,並且該前綴將取決於您綁定的服務的名稱。

Spring Boot將以以下格式映射綁定到您的應用程序的vcap.services.<service name>.credentials.<credential-key>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)。

有關更多詳細信息,請閱讀此博客文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM