如何使用环境特定配置创建 Spring Cloud Config Client?
How to create Spring Cloud Config Client with env specific configuration?
我遇到了 Spring Cloud Config Server 和 Eureka Server Profiling 的问题。
假设我有 3 个服务,它们的名称 ("spring.application.name") 为:
myapp-svc
myapp-spring-cloud-config-svc
myapp-spring-eureka-svc
我想在 2 个区域(开发和生产)中部署每项服务。在 Dev 区域中,每个服务将 运行 在 localhost 上,而在 prod 中它将有一些不同的 url。 'myapp-spring-cloud-config-svc' 在开发区域将指向本地 git 存储库,而在生产区域它将指向远程 git repo.I 可以有 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 但它不起作用。根据文档,必须在 bootstrap.
中进行更改
So, how do I implement this without having to create new build for prod ?
2) 我可以先调用eureka 然后使用eureka 我可以在这里调用配置服务。
这里的问题也是一样的。
如果我使用 eureka 查找配置,那么 "eureka.client.serviceUrl.defaultZone" 必须在 "bootstrap.yml" 中定义。
看到这个:https://cloud.spring.io/spring-cloud-config/multi/multi__spring_cloud_config_client.html
因此,在这种情况下,我也需要在将此服务部署到产品之前更改 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
(例如 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}
我遇到了 Spring Cloud Config Server 和 Eureka Server Profiling 的问题。
假设我有 3 个服务,它们的名称 ("spring.application.name") 为:
myapp-svc
myapp-spring-cloud-config-svc
myapp-spring-eureka-svc
我想在 2 个区域(开发和生产)中部署每项服务。在 Dev 区域中,每个服务将 运行 在 localhost 上,而在 prod 中它将有一些不同的 url。 'myapp-spring-cloud-config-svc' 在开发区域将指向本地 git 存储库,而在生产区域它将指向远程 git repo.I 可以有 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 但它不起作用。根据文档,必须在 bootstrap.
中进行更改 So, how do I implement this without having to create new build for prod ?
2) 我可以先调用eureka 然后使用eureka 我可以在这里调用配置服务。 这里的问题也是一样的。 如果我使用 eureka 查找配置,那么 "eureka.client.serviceUrl.defaultZone" 必须在 "bootstrap.yml" 中定义。 看到这个:https://cloud.spring.io/spring-cloud-config/multi/multi__spring_cloud_config_client.html 因此,在这种情况下,我也需要在将此服务部署到产品之前更改 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
(例如 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}