Spring cloud 在SpringCloudConfigServer中组织大量应用程序配置

Spring cloud 在SpringCloudConfigServer中组织大量应用程序配置,spring-cloud,Spring Cloud,既然SpringCloud配置是GA,我们将考虑使用它作为SpringBoot应用程序的外部配置源。由于所涉及的技术对我们的组织来说是如此之新,我收到了很多关于云配置在生产中如何工作的问题,特别是在部署和灾难场景中 我想我开始了解服务器是如何加载和分发配置的,这让我想知道组织和部署配置的最佳方式是什么。我的第一个想法是让每个应用程序都有自己的Git repo和一个公共配置repo 这里的问题是我一直在误读文档。我的印象是我可以做这样的事情: git: uri: ssh://git@stas

既然SpringCloud配置是GA,我们将考虑使用它作为SpringBoot应用程序的外部配置源。由于所涉及的技术对我们的组织来说是如此之新,我收到了很多关于云配置在生产中如何工作的问题,特别是在部署和灾难场景中

我想我开始了解服务器是如何加载和分发配置的,这让我想知道组织和部署配置的最佳方式是什么。我的第一个想法是让每个应用程序都有自己的Git repo和一个公共配置repo

这里的问题是我一直在误读文档。我的印象是我可以做这样的事情:

git:
   uri: ssh://git@stash:7999/scc/common-config.git
   repos:
      app-config:
         uri: ssh://git@stash:7999/scc/
         pattern: app*-config.git    
git:
   uri: ssh://git@stash:7999/scc/common-config.git
   repos:
      app-foo-config:
         uri: ssh://git@stash:7999/scc/app-foo-config.git
         pattern: app-foo*    
git:
   uri: ssh://git@stash:7999/scc/common-config.git
   repos:
      domain-foo-config:
         uri: ssh://git@stash:7999/scc/domain-foo-config.git
         pattern: domain-foo*    
      domain-bar-config:
         uri: ssh://git@stash:7999/scc/domain-bar-config.git
         pattern: domain-bar*    
      domain-baz-config:
         uri: ssh://git@stash:7999/scc/domain-baz-config.git
         pattern: domain-baz*    
我们的想法是,app-config将获取所有匹配该模式的Git存储库。在部署新的应用程序时,我们会重新启动服务器,以在新的存储库中获取配置。我没有得到的是,该模式指的是指定存储库中的文件,而不是git文件本身。所以我真正要做的是这样的:

git:
   uri: ssh://git@stash:7999/scc/common-config.git
   repos:
      app-config:
         uri: ssh://git@stash:7999/scc/
         pattern: app*-config.git    
git:
   uri: ssh://git@stash:7999/scc/common-config.git
   repos:
      app-foo-config:
         uri: ssh://git@stash:7999/scc/app-foo-config.git
         pattern: app-foo*    
git:
   uri: ssh://git@stash:7999/scc/common-config.git
   repos:
      domain-foo-config:
         uri: ssh://git@stash:7999/scc/domain-foo-config.git
         pattern: domain-foo*    
      domain-bar-config:
         uri: ssh://git@stash:7999/scc/domain-bar-config.git
         pattern: domain-bar*    
      domain-baz-config:
         uri: ssh://git@stash:7999/scc/domain-baz-config.git
         pattern: domain-baz*    
这种方法的问题是,每次部署另一个应用程序时,除了重新启动它们之外,我还需要一个过程来更新云配置服务器的bootstrap.yml文件,以添加另一个应用程序的repo,如下所示:

git:
   uri: ssh://git@stash:7999/scc/common-config.git
   repos:
      app-foo-config:
         uri: ssh://git@stash:7999/scc/app-foo-config.git
         pattern: app-foo*    
      app-bar-config:
         uri: ssh://git@stash:7999/scc/app-bar-config.git
         pattern: app-bar*    
这不是很理想。在我看来,我的配置必须按域划分为多个存储库,这给了我类似的东西:

git:
   uri: ssh://git@stash:7999/scc/common-config.git
   repos:
      app-config:
         uri: ssh://git@stash:7999/scc/
         pattern: app*-config.git    
git:
   uri: ssh://git@stash:7999/scc/common-config.git
   repos:
      app-foo-config:
         uri: ssh://git@stash:7999/scc/app-foo-config.git
         pattern: app-foo*    
git:
   uri: ssh://git@stash:7999/scc/common-config.git
   repos:
      domain-foo-config:
         uri: ssh://git@stash:7999/scc/domain-foo-config.git
         pattern: domain-foo*    
      domain-bar-config:
         uri: ssh://git@stash:7999/scc/domain-bar-config.git
         pattern: domain-bar*    
      domain-baz-config:
         uri: ssh://git@stash:7999/scc/domain-baz-config.git
         pattern: domain-baz*    
这应该可以防止我的配置失控,只要我能保持域的逻辑性。那么,我的问题是什么?有两个:

  • 我的最终方法是合理的还是我错过了更好的方法

  • 这些文档意味着配置可以放在文件夹中,这将有助于保持配置的有序性。有人在这方面运气好吗

  • 此外,由于您已经深入到我的文字墙中,我认为多个回购配置的模式都存在缺陷

    如果没有模式,服务器不会从repo中的任何文件交付任何配置。除此之外,虽然模式“*”有效,但它仅适用于首次回购。之后,无论给定何种模式,云配置服务器都无法从任何其他repo中的任何文件加载任何配置。这包括默认回购协议

    如果没有模式,服务器不会从中交付任何配置 回购协议中的任何文件。除此之外,当模式“*”起作用时, 它只适用于首次回购。之后,云配置服务器 无法从任何其他repo no中的任何文件加载任何配置 不管给出什么样的模式。这包括默认回购协议

    如果您不需要该模式,只需使用

    git:
       uri: ssh://git@stash:7999/scc/common-config.git
    
    如果需要使用repo with模式,请确保bootstrap.yml中应用程序的spring.application.name具有相同的模式。比如说,

    spring:
       application:
          name: domain-foo-app-a
    
    虫子请到这里来:(但我不认为这是虫子)