2016-02-26 511 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

相关问题