spring-boot - 如何使用 env 特定配置创建 Spring Cloud Config Client?
问题描述
我遇到了 Spring Cloud Config Server 和 Eureka Server Profiling 的问题。
假设我有 3 个服务,其名称(“spring.application.name”)为:
myapp-svc
myapp-spring-cloud-config-svc
myapp-spring-eureka-svc
我想在 2 个区域( dev 和 prod )中部署每个服务。在 Dev 区域,每个服务都将在 localhost 上运行,并且在 prod 中它会有一些不同的 url。dev 区域中的“myapp-spring-cloud-config-svc”将指向本地 git repo,而在 prod 区域中它将指向远程 git repo。我可以有 2 个配置:
1)当我在本地启动“myapp-svc”服务时,它应该连接到开发中的“myapp-spring-cloud-config-svc”。我可以通过设置 spring.cloud.config.uri = 来做到这一点。但是这个设置的问题是该属性需要在 bootstrap.properties 中定义。因此,如果将“myapp-svc”部署到 prod,我将不得不更改那里的配置 uri 以将其指向 prod 配置服务,这反过来又需要另一个构建创建。这似乎不是一个好的解决方案,如果我有 50 个与应用程序相关的服务,我无法在产品部署之前更改每个服务中的这个属性。我尝试在“myapp-svc”的 application-dev.properties 中设置 spring.cloud.config.uri 但它不起作用。根据文档,它必须在引导程序中更改。
So, how do I implement this without having to create new build for prod ?
2)我可以先调用eureka,然后使用eureka我可以在这里调用配置服务。这里的问题也是一样的。如果我使用 eureka 查找配置,则必须在“bootstrap.yml”中定义“eureka.client.serviceUrl.defaultZone”。看到这个:https ://cloud.spring.io/spring-cloud-config/multi/multi__spring_cloud_config_client.html 所以,在这种情况下,我也需要在将此服务部署到 prod 之前更改 eureka url。请帮我解决这个问题……!!以下是上述每个服务的属性 yml 的样子:
1) myapp-svc:
1.1)bootstrap.yml
spring:
application:
name: myapp-svc
cloud:
config:
discovery:
enabled: true
serviceId: myapp-spring-cloud-config-svc
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8762/eureka/
server:
port: 8082
2) myapp-spring-cloud-config-svc:
2.1)application-dev.properties:
spring.cloud.config.server.git.uri=file:///C:/config-repo
eureka.client.serviceUrl.defaultZone=http://localhost:8762/eureka
2.2)application-prod.properties:
spring.cloud.config.server.git.uri=https://github.com/<mygit Repo>
2.3)bootstrap.proerties:
spring.application.name=myapp-spring-cloud-config-svc
server.port=8888
3) myapp-spring-eureka-svc
3.1)bootstrap.proerties
spring.application.name=myapp-spring-eureka-svc
server.port=8762
解决方案
1)您可以为每个受支持的配置文件指定配置文件bootstrap-<profile>.properties
(例如 for application-<profile>.properties
),以避免为每个环境重建您的应用程序。然后只需在启动期间将应用程序配置文件使用传递给您的应用程序。Spring 将正确加载bootstrap-<profile>.properties
并连接到正确的配置服务器(或 eureka 等)。例子:
java -jar your-app.jar --spring.profiles.active=dev
2)您可以将您的 URL 作为自定义属性从外部传递(与上面的配置文件相同),并在bootstrap.properties
. 例子:
spring.cloud.config.uri=${config.server.url}
然后--config.server.url= ...
在启动过程中通过。
3) 你可以在启动过程中以同样的方式传递 Spring 属性。例子:
java -jar your-app.jar --spring.cloud.config.uri= ...
4)您可以使用系统环境变量。例子:
spring.cloud.config.uri=${SYSTEM_ENV_CLOUD_CONFIG_URI}
推荐阅读
- rest - Splunk REST API - 如何向已保存的搜索添加额外字段?
- python - 使用外键比较两个模型的字段。(用于在正确的类别下显示正确的产品)使用 django
- html - 如何使内容的宽度等于图像的宽度?
- aws-api-gateway - AWS API Gateway HTTP API CORS 预检请求
- java - 如何在 apache-flink 中创建动态规则?
- javascript - 如何为 JavaScript 制作键盘(数字)
- facebook - 根据关键字搜索 Facebook 帖子 Facebook API
- python - Flask-SQLAlchemy 模型的更新函数
- azure-logic-apps - 在逻辑应用程序中获取数组的最大值?
- openacc - OpenACC:错误“不支持的语句类型:操作码=JSRA”