我们每个环境都有不同的配置服务器。每个春季启动应用程序应针对其相应的配置服务器。我试图通过在bootstrap.properties文件中设置配置文件来实现这一目标,例如:
spring.application.name=app-name
spring.cloud.config.uri=http://default-config-server.com
---
spring.profiles=dev
spring.cloud.config.uri=http://dev-config-server.com
---
spring.profiles=stage
spring.cloud.config.uri=http://stage-config-server.com
---
spring.profiles=prod
spring.cloud.config.uri=http://prod-config-server.com
然后我设置了CLA -Dspring.profiles.active=dev
,但是加载的配置服务器始终是文件中的最后一个集合(即产品配置服务器将加载在上面的设置中,然后如果删除了POR,则将加载阶段)。
是否可以为Cloud Config Server设置Bootstrap配置文件?我遵循了这个示例,但似乎无法正常工作。对于它的价值,这些配置文件可以很好地加载正确的配置(即,如果Dev配置文件处于活动状态,则将加载Properties,但不会从适当的配置服务器中提取。
<</p>在单个文件中指定不同的配置文件仅支持yaml文件,并且不适用于属性文件。对于属性文件,指定特定环境的bootstrap-[profile].properties
,以覆盖默认的bootstrap.properties
属性。
因此,在您的情况下,您将获得4个文件bootstrap.properties
,bootstrap-prod.properties
,bootstrap-stage.properties
和bootstrap-dev.properties
。
但是,您还只能提供默认的bootstrap.properties
,并且在启动应用程序时,通过将-Dspring.cloud.config.uri=<desired-uri>
传递给应用程序来覆盖属性。
java -jar <your-app>.jar -Dspring.cloud.config.uri=<desired-url>
这将优先于默认配置的值。
I solved a similar problem with an environment variable in Docker.
bootstrap.yml
spring:
application:
name: dummy_service
cloud:
config:
uri: ${CONFIG_SERVER_URL:http://localhost:8888/}
enabled: true
profiles:
active: ${SPR_PROFILE:dev}
dockerfile
ENV CONFIG_SERVER_URL=""
ENV SPR_PROFILE=""
docker-compose.yml
version: '3'
services:
dummy:
image: xxx/xxx:latest
restart: always
environment:
- SPR_PROFILE=docker
- CONFIG_SERVER_URL=http://configserver:8888/
ports:
- 8080:8080
depends_on:
- postgres
- configserver
- discovery
@larryw(我无法在同一评论中回答):
我想明确添加该属性的优点是,它允许您在不设置环境变量的情况下添加默认值(在这种情况下为" dev")。