Spring boot 通过manifest.yml文件配置目录项
使用Spring boot 通过manifest.yml文件配置目录项,spring-boot,spring-cloud,Spring Boot,Spring Cloud,使用springcloudfoundry服务代理我们开发了一个服务代理 最初,我们在application.yml文件中定义了目录项,该文件捆绑在jar中,这一切都非常有效 我们没有在jar文件中绑定目录项,而是考虑通过manifest.yml文件提供,同时将服务推到CloudFoundry。 但不幸的是,应用程序没有获得manigest.yml文件中指定的目录项。您能告诉我们如何通过manifest.yml文件提供目录项目吗 我已经在这里复制了我的代码片段 CatalogConfig.java
springcloudfoundry服务代理
我们开发了一个服务代理
最初,我们在
application.yml
文件中定义了目录项,该文件捆绑在jar中,这一切都非常有效
我们没有在jar文件中绑定目录项,而是考虑通过manifest.yml
文件提供,同时将服务推到CloudFoundry
。
但不幸的是,应用程序没有获得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();
}
}
那不行
当将应用程序推送到CF时,manifest.yml
文件仅用于提供选项。部署的应用程序从未看到此文件或其任何内容。事实上,CF平台本身从未看到该文件或其内容-它完全由客户端的CLI处理
application.yml
文件由使用,内容通过@ConfigurationProperties
和其他方式提供给应用程序
这是两个完全独立的概念和机制,两者都使用YAML数据格式 那不行
当将应用程序推送到CF时,manifest.yml
文件仅用于提供选项。部署的应用程序从未看到此文件或其任何内容。事实上,CF平台本身从未看到该文件或其内容-它完全由客户端的CLI处理
application.yml
文件由使用,内容通过@ConfigurationProperties
和其他方式提供给应用程序
这是两个完全独立的概念和机制,两者都使用YAML数据格式 感谢斯科特的快速回复。无论如何,我们可以通过清单文件将目录项作为环境变量发送。若它只是一个字符串,我可以通过清单文件将该属性发送到我的配置类,但由于目录项是列表项,我不确定如何将其作为环境变量发送。如果有任何可能性,请告诉我!您可以使用manifest.yml中的“env”块指定要在应用程序上设置的环境变量,就像您在上面的示例中使用“SPRING\u PROFILES\u DEFAULT:cloud”环境变量一样。但是我们如何将目录项指定为环境变量呢?我认为所有环境变量都是String类型,但目录项是list。“但是我们如何将目录项指定为环境变量呢?”您不能轻松地这样做,因为目录元数据是结构化数据图,而环境变量必须是字符串。如果您打算以声明方式指定目录元数据,则需要在application.yml中执行此操作。您在上面说过这很好,为什么不满足您的要求呢?我希望将目录项外部化,但不捆绑war/jar。所以,我想在manifest.yml文件中说明。谢谢Scott的快速回复。无论如何,我们可以通过清单文件将目录项作为环境变量发送。若它只是一个字符串,我可以通过清单文件将该属性发送到我的配置类,但由于目录项是列表项,我不确定如何将其作为环境变量发送。如果有任何可能性,请告诉我!您可以使用manifest.yml中的“env”块指定要在应用程序上设置的环境变量,就像您在上面的示例中使用“SPRING\u PROFILES\u DEFAULT:cloud”环境变量一样。但是我们如何将目录项指定为环境变量呢?我认为所有环境变量都是String类型,但目录项是list。“但是我们如何将目录项指定为环境变量呢?”您不能轻松地这样做,因为目录元数据是结构化数据图,而环境变量必须是字符串。如果您打算以声明方式指定目录元数据,则需要在application.yml中执行此操作。您在上面说过这很好,为什么不满足您的要求呢?我希望将目录项外部化,但不捆绑war/jar。所以,我想在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/