如果远程存储库不可用,如何为 Spring Cloud Config 服务设置本地回退配置?

How do I setup a local fallback config for Spring Cloud Config service incase remote repo is not available?

我们计划将 Spring Cloud Config 用于我们的服务。我们最大的担忧是,当容器启动时,它依赖于 github 始终可用,以便它可以拉取配置文件。如果 github 出现故障,缓解该问题的最佳做法是什么?

我正在考虑将配置的本地文件夹存储为备份并配置 application.yml 以回退到它(我不知道如何)。

我打算使用复合环境存储库 请看这里:Section 2.1.8

然而它指出:

Any type of failure when retrieving values from an environment repository results in a failure for the entire composite environment.

这意味着如果 git 检索失败,它不会回退到组合的本地组件。我希望如此。你们中有人处理过类似的问题吗?你是怎么解决的?

这是一篇关于最佳做法的好文章。但是,对于案例 1,我需要一个解决方法:Best practices on handling GIT repository inavailability

Spring-云有一个配置属性来处理这个问题;

spring.cloud.config.server.git.basedir = /your/config/local/fallback/directory

NOTE - If you're using a .yml file, then define the above property as per yaml conventions.

要了解背景知识,请查看文档:http://cloud.spring.io/spring-cloud-static/Finchley.RC1/single/spring-cloud.html#_version_control_backend_filesystem_use


所以基本上这里发生的是 - 只要您的应用程序最初能够连接到您在 spring.cloud.config.server.git.uri = https://your-git/config-repo.git 中设置的 git 存储库,然后在 config-server/container 启动时,您在 spring.cloud.config.server.git.basedir 中定义的目录会在本地创建,默认情况下 spring-cloud 会将您的配置克隆到此目录中以用作后备。

因此,每当您的 git 存储库无法访问时,spring-cloud 将从该基本目录获取您的配置。


注意事项:

除非你真的想仅在配置服务器启动时重新克隆 git 配置,否则请确保 属性 spring.cloud.config.server.git.clone-on-start 未设置为 true或者根本没有设置 - 否则,每次你重新启动你的云配置服务时,配置将被删除并重新克隆,如果存储库当时不可用,应用程序启动将失败 - 你可能不想要那个.

但是,如果 spring.cloud.config.server.git.clone-on-start 设置为 false 或者根本没有设置(在这种情况下默认为 false),那么 git 存储库只会被克隆按需 - 因此如果存储库无法访问,spring-cloud 将优雅地回退以从 spring.cloud.config.server.git.basedir

中获取配置

即使应用程序配置服务器(或其容器)重新启动并且无法访问 git 存储库,您也会看到如下所示的内容;

No custom http config found for URL: https://your-git/config-repo.git/info/refs?service=git-upload-pack
... s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@3a26f314: startup date [Mon Oct 15 22:01:34 EDT 2018]; root of context hierarchy
... o.s.c.c.s.e.NativeEnvironmentRepository  : Adding property source: file:/your/config/local/fallback/directory/application.properties

注意这一行:

Adding property source:file:/your/config/local/fallback/directory/application.properties

这就是奇迹发生的地方。


因此,如果您希望 spring.cloud.config.server.git.basedir 甚至在您的配置服务器首次启动之前就可以作为后备(并且无论您的 git 存储库在启动期间是否无法访问),您可以执行以下步骤;

  1. 手动创建 spring.cloud.config.server.git.basedir
  2. 从您的终端cd /your/config/local/fallback/directory
  3. git clone https://your-git/config-repo.git 当 repo 可用时
  4. 确保包括 .git 文件夹在内的所有配置 files/folders/sub-folders 都直接克隆到后备目录的根目录。

    例如,有一种趋势是 git clone https://your-git/config-repo.git 会将存储库克隆到后备目录中作为 /your/config/local/fallback/directory/config-repo。您将不得不复制 config-repo 的每个该死的内容 - 也包括 .git 文件夹 - 并直接复制到 /your/config/local/fallback/directory

  5. 首次启动配置服务器(或其容器)或任何时候! ......... 瞧!!