2016-02-26 94 views
0

使用spring-cloud-cloudfoundry-service-broker我們開發了一個service broker
最初我們在application.yml文件中定義了目錄項,它被捆綁在jar裏面,這一切都很好。通過manifest.yml文件配置目錄項

我們沒有在jar文件中捆綁目錄項,而是在推送服務時通過manifest.yml文件提供給cloud foundry。 但不幸的是,應用程序未獲取manigest.yml文件中指定的目錄項目。您能否讓我們知道我們如何通過manifest.yml文件提供商品目錄?

我在這裏複製了我的代碼片段。

CatalogConfig.java

@ConfigurationProperties(prefix = "catalog") 
@Component 
public class CatalogConfig { 
private List<ServiceDefinitionProxy> services; 

public CatalogConfig() { 
    super(); 
} 

@Bean 
Catalog catalog() { 
    return new Catalog(services.stream().map(s -> s.unproxy()) 
      .collect(Collectors.toList())); 
} 

public CatalogConfig(List<ServiceDefinitionProxy> services) { 
    super(); 
    this.services = services; 
} 

public List<ServiceDefinitionProxy> getServices() { 
    return services; 
} 

public void setServices(List<ServiceDefinitionProxy> services) { 
    this.services = services; 
} 

public ServiceDefinitionProxy findServiceDefinition(String serviceId) { 
    return services.stream().filter(s -> s.getId().equals(serviceId)) 
      .findFirst().get(); 
} 
}  

Manifest.yml

--- 
applications: 
- name: my-service-broker 
    memory: 512M 
    instances: 1 
    host: my-service-broker 
    path: target/my-service-broker-1.0.0-SNAPSHOT.jar 
    env: 
    SPRING_PROFILES_DEFAULT: cloud 
catalog: 
    services: 
     - id: f1478faa-d980-11e5-b5d2-0a1d41d68578 
     name: api-marketpace 
     description: API Marketplace 
     bindable: true 
     planUpdatable: true 
     head-type: api 
     tags: 
      - api 
      - Manage API Marketplace 
     metadata: 
      displayName: API Marketplace 
      imageUrl: https://my-service-broker.cf.com/images/logo.PNG 
      longDescription: API Marketplace. 
      providerDisplayName: API Team 
      documentationUrl: https://wikihub.com/display/ASC/Training 
      supportUrl: https://wikihub.com/display/ASC/Training 
     plans: 
      - id: f1478faa-d980-11e5-b5d2-0a1d41d68579 
      name: unlimited 
      description: free 
      metadata: 
       costs: 
       - amount: 
        usd: 0.00 
        unit: PER MONTH 
       bullets: 
       - Basic Unlimited 
     dashboardClient: 
      id: api-marketpace 
      secret: secret 
      redirectUrl: https://api.cf.com/ 

回答

2

這是行不通的。

manifest.yml文件專用於cf CLI以在將應用推送到CF時提供選項。部署的應用程序永遠不會看到此文件或其任何內容。實際上,CF平臺本身從不會看到文件或其內容 - 它完全由客戶端的CLI處理。

application.yml文件被Spring Boot使用,並且通過@ConfigurationProperties和其他方式將內容提供給應用程序。

這些是兩個完全分離的概念和機制,它們都碰巧使用YAML數據格式。

+0

感謝Scott的快速回復。無論如何,我們可以通過清單文件將目錄項作爲環境變量發送。如果它只是一個字符串,我可以設法通過清單文件將該屬性發送給我的配置類,但由於目錄項是列表,我不知道如何將它作爲環境變量發送。讓我知道是否有任何可能! – Dombe

+0

您可以使用manifest.yml中的「env」塊指定應用程序中設置的env vars,就像您在上面的示例中使用「SPRING_PROFILES_DEFAULT:cloud」env var一樣。 –

+0

但是,我們如何將目錄項目指定爲環境變量?我認爲所有的環境變量都是String類型,但目錄項是列表。 – Dombe