如何使用特定于环境的配置创建Spring Cloud Config Client?

时间:2018-07-31 12:11:19

标签: spring-boot microservices spring-cloud-config

我遇到了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)中部署每个服务。在开发区域中,每个服务都将在localhost上运行,并且在生产中它将具有一些不同的URL。开发人员区域中的“ myapp-spring-cloud-config-svc”将指向本地git repo,而生产区域中的myapp-spring-cloud-config-svc将指向远程git repo。我可以有2种配置:

1)当我在本地启动“ myapp-svc”服务时,它应连接到dev中的“ myapp-spring-cloud-config-svc”。       我可以通过设置spring.cloud.config.uri =来做到这一点。       但是,此设置的问题在于该属性需要在bootstrap.properties中定义。       因此,如果将'myapp-svc'部署到prod,我将不得不在此处更改config uri,以将其指向prod config服务,这又需要创建另一个构建。       这似乎不是一个很好的解决方案,如果我有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 因此,在这种情况下,我也需要在将此服务部署到产品之前更改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 个答案:

答案 0 :(得分:1)

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}