我们计划将Spring Cloud Config用于我们的服务。我们最大的担心是,当容器启动时,它依赖于github始终可用,以便可以拉出配置文件。万一github出现故障,缓解该问题的最佳实践是什么?
我当时正在考虑将配置的本地文件夹存储为备份,并配置application.yml以使其回退(我不知道如何)。
我打算使用复合环境存储库 请在此处查看:Section 2.1.8
但是它指出:
从环境存储库中检索值时发生的任何类型的故障都会导致整个组合环境的故障。
这意味着,如果git检索失败,它就不会退回到组合的本地组件。我希望做到了。你们有没有处理过类似的问题?您是如何解决的?
这是一篇有关最佳做法的好文章。但是,我需要一种情况1:Best practices on handling GIT repository inavailability
答案 0 :(得分:3)
Spring-Cloud具有配置属性来处理此问题;
spring.cloud.config.server.git.basedir = /your/config/local/fallback/directory
注意-如果您使用的是
.yml
文件,则将上述属性定义为 每个Yaml约定。
要了解背景知识,请查看文档:{{3}}
因此,基本上,这里发生的是-只要您的应用程序最初能够连接到您在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
或根本没有被设置-否则,每次您重新启动cloud-config服务时,配置将被删除并再次重新克隆,并且如果该存储库当时不可用,则应用程序启动将失败- ,您可能不希望这样做 。
但是,如果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 repo),可以执行以下操作步骤;
spring.cloud.config.server.git.basedir
cd /your/config/local/fallback/directory
git clone https://your-git/config-repo.git
在回购可用时 确保将您的所有配置文件/文件夹/子文件夹(包括.git
文件夹都直接克隆到后备目录的根目录中。
例如,有一种趋势,git clone https://your-git/config-repo.git
会将存储库克隆为/your/config/local/fallback/directory/config-repo
到回退目录中。您将必须复制config-repo
的所有坏内容-包括.git
文件夹-直接复制到/your/config/local/fallback/directory
或何时 首次启动配置服务器(或其容器)! ......... Voila !!