首页 文章

如何使用env特定配置创建Spring Cloud Config Client?

提问于
浏览
2

我遇到了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'服务时,它应该连接到dev中的'myapp-spring-cloud-config-svc' . 我可以通过设置spring.cloud.config.uri =来做到这一点 . 但是这个设置的问题是需要在bootstrap.properties中定义属性 . 因此,如果将'myapp-svc'部署到prod,我将不得不更改配置uri那里指向prod配置服务,这反过来需要另一个构建创建 . 这似乎不是一个好的解决方案,如果我有50个应用程序相关的服务,我不能在prod部署之前在每个服务中更改此属性 . 我尝试在'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查找配置,则必须在"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 回答

  • 1

    1)您可以为每个支持的配置文件提供特定于配置文件的 bootstrap-<profile>.properties (例如 application-<profile>.properties ),以避免为每个环境重建应用程序 . 然后在启动期间将应用程序配置文件传递给您的应用程序 . Spring将加载正确 bootstrap-<profile>.properties 并将连接到正确的配置服务器(或尤里卡等) . 例:

    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)您可以使用系统env变量 . 例:

    spring.cloud.config.uri=${SYSTEM_ENV_CLOUD_CONFIG_URI}
    

相关问题