Моя цель - добавить пользовательский PropertySource к spring-cloud-серверу. Я хочу получить некоторые пользовательские свойства из этого настраиваемого источника в приложении spring-cloud-config-client.Spring cloud config server - как добавить пользовательский PropertySource, видимый в методе findOne() EnvironmentEncryptorEnvironmentRepository
Основываясь на предложениях от Adding environment repository in 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
находится в списке propertySources внутри EnviromentRepository
bean injected to EnvironmentController
.
Проблема: Когда я посылаю запрос GET на @RequestMapping("/{name}/{profiles}/{label:.*}")
(в EnvironmentController
), впрыскивается EnviromentRepository
боб используется, чтобы найти требуемый источник свойств (repository.findOne(name, profiles, label)
метод). К сожалению, моего источника собственности здесь не найдено. Зачем?
Я потратил много времени на отладку этого. Я обнаружил, что делегат репозитория вызывает вызов метода findOne()
в другие репозитории: MultipleJGitEnvironmentRepository
, который делегирует его NativeEnvironmentRepository
. Внутри этого делегата метод findOne() не использует propertySources от EnviromentRepository
первичного ввода в контроллер. Он создает новый репозиторий среды с новым списком PropertySources и новой отдельной SpringApplication. В конце этот список не содержит мой CustomPropertySource
, и именно поэтому findOne()
возвращает пустую собственность. Источники в результате Environment
объекта.
- Я делаю что-то неправильно?
- ли
CustomPropertySourceLocator
(и/илиConsulPropertySourceLocator
) предполагается использовать (autowired/бутстрапируемым) вspring-cloud-config-server
илиspring-cloud-config-client
- Может весну-облако-конфигурация-сервер доставить много различных видов
PropertySources
в то же время, через интерфейс REST (говоря «разные», я имею в виду всех Git, Consul и Zookeeper)?
Какую версию Spring Cloud вы используете? До недавнего времени, если в этом контексте существовал другой компонент «EnvironmentRepository», ни один из компонентов по умолчанию «EnvironmentRepository» не был бы создан, поэтому я смущен тем, как «MultipleJGitEnvironmentRepository» или «NativeEnvironmentRepository» будут созданы в вашем случае.Можете ли вы предоставить пример приложения, демонстрирующий проблему, которую вы видите? –
Я использую 1.1.0.RELEASE. – mombip
Я использую 1.1.0.RELEASE. «EnvironmentRepository», введенный в «EnvironmentController», изначально «EnvironmentEncryptorEnvironmentRepository». Он делегирует вызов 'MultipleJGitEnvironmentRepository', который наследует реализацию от' AbstractScmEnvironmentRepository'. FindOne() из последнего делает новый 'NativeEnvironmentRepository' проходящий' ConfigurableEnvironment', который содержит мой 'CustomPropertySource' внутри источника свойств bootstrapProperties. Это означает, что «NativeEnvironmentRepository» фильтрует его из-за жестко закодированного «-spring.cloud.bootstrap.enabled = false» в методе getArgs(). – mombip