Spring-Cloud имеет свойство конфигурации для решения этой проблемы;
spring.cloud.config.server.git.basedir = /your/config/local/fallback/directory
ПРИМЕЧАНИЕ. - Если вы используете файл .yml
, определите указанное выше свойство в соответствии с соглашениями yaml.
Чтобы получить базовые знания, ознакомьтесь с документацией: http://cloud.spring.io/spring-cloud-static/Finchley.RC1/single/spring-cloud.html#_version_control_backend_filesystem_use
По сути, здесь происходит следующее: если ваше приложение изначально могло подключаться к репозиторию git, который вы настроили вspring.cloud.config.server.git.uri = https://your-git/config-repo.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
был доступен в качестве запасного варианта даже до первого запуска вашего config-сервера (и если ваш git-репо недоступен во времяПри запуске) вы можете выполнить следующие шаги:
- Вручную создать
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
Запустить config-сервер (или его контейнер)в первый раз или всякий раз, когда !......... Вуаля !!