Моя цель – добавить собственный источник свойств на сервер spring-cloud. Чего я хочу добиться, так это получить некоторые пользовательские свойства из этого пользовательского источника в приложении spring-cloud-config-client.
Основываясь на предложениях Добавление репозитория среды в spring-config-server, я создали spring-cloud-config-server
приложение и отдельный проект spring-cloud-config-custom
. Второй основан на spring-cloud. -consul-config код. Итак, я создал все необходимые классы, такие как CustomPropertySource
, CustomPropertySourceLocator
, CustomConfigBootstrapConfiguration
и так далее, и настроил их в spring.factories
.
В конце я добавил зависимость maven к spring-cloud-config-custom
внутри моего файла spring-cloud-config-server
.
Все идет нормально. Все работает хорошо. Когда я запускаю сервер, я вижу, что мой CustomPropertySource
находится в списке источников свойств внутри bean-компонента EnviromentRepository
, введенного в EnvironmentController
.
Проблема. Когда я отправляю запрос GET на @RequestMapping("/{name}/{profiles}/{label:.*}")
(в EnvironmentController
), внедренный компонент EnviromentRepository
используется для поиска источника запрошенного свойства (метод repository.findOne(name, profiles, label)
). К сожалению, мой источник собственности не может быть найден здесь. Почему?
Я потратил много времени на отладку этого. Я обнаружил, что репозиторий делегирует вызов метода findOne()
другим репозиториям: MultipleJGitEnvironmentRepository
который делегирует его NativeEnvironmentRepository
. Внутри этих делегатов метод findOne() не использует источники свойств из EnviromentRepository
первичного, введенного в контроллер. Он создает новый репозиторий среды с новым списком источников свойств и новым отдельным приложением SpringApplication. В конце этого списка нет моего CustomPropertySource
, и поэтому findOne()
возвращает пустые источники свойств в результирующем объекте Environment
.
- Я делаю что-то неправильно?
- Предполагается ли использование
CustomPropertySourceLocator
(и/илиConsulPropertySourceLocator
) (автоподключение/загрузка) вspring-cloud-config-server
илиspring-cloud-config-client
- Может ли spring-cloud-config-server доставлять много разных
PropertySources
одновременно через интерфейс REST (под «другим» я подразумеваю все Git, Consul и Zookeeper)?
EnvironmentRepository
, ни один из компонентовEnvironmentRepository
по умолчанию не был бы создан, поэтому я не понимаю, как в вашем случае будут созданыMultipleJGitEnvironmentRepository
илиNativeEnvironmentRepository
. Можете ли вы предоставить пример приложения, демонстрирующего проблему, с которой вы столкнулись? - person Ryan Baxter   schedule 22.12.2016EnvironmentRepository
, введенный вEnvironmentController
, изначально являетсяEnvironmentEncryptorEnvironmentRepository
. Он делегирует вызовMultipleJGitEnvironmentRepository
, который наследует реализацию отAbstractScmEnvironmentRepository
. FindOne() из последнего создает новыйNativeEnvironmentRepository
, передаваяConfigurableEnvironment
, который содержит мой источник свойстваCustomPropertySource
внутриbootstrapProperties
. Похоже, чтоNativeEnvironmentRepository
фильтрует его из-за жестко запрограммированного --spring.cloud.bootstrap.enabled=false в методе getArgs(). - person Marek Podyma   schedule 22.12.2016