Mon objectif consiste à ajouter PropertySource personnalisé à spring-cloud-server. Ce que je veux réaliser est d'obtenir des propriétés personnalisées de cette source personnalisée dans l'application spring-cloud-config-client. En fonction des suggestions de Adding environment repository in spring-config-server J'ai créé l'application spring-cloud-config-server
et j'ai séparé le projet spring-cloud-config-custom
. Le second est basé sur le code spring-cloud-consul-config. Donc, j'ai créé toutes les classes nécessaires comme CustomPropertySource
, CustomPropertySourceLocator
, CustomConfigBootstrapConfiguration
et ainsi de suite et les configurés en spring.factories
. À la fin, j'ai ajouté la dépendance maven à spring-cloud-config-custom
à l'intérieur de mon spring-cloud-config-server
.Spring cloud config server - comment ajouter PropertySource personnalisé visible dans la méthode findOne() de EnvironmentEncryptorEnvironmentRepository
Jusqu'ici tout va bien. Tout fonctionne bien. Quand je démarre le serveur je peux voir que mon CustomPropertySource
est sur la liste de propertySources à l'intérieur du haricot EnviromentRepository
injecté à EnvironmentController
.
Problème: Lorsque j'envoie la demande GET à @RequestMapping("/{name}/{profiles}/{label:.*}")
(en EnvironmentController
), injecté EnviromentRepository
haricot est utilisé pour trouver la source de propriété demandée (repository.findOne(name, profiles, label)
méthode). Malheureusement, ma source de propriété n'a pas pu être trouvée ici. Pourquoi?
J'ai passé beaucoup de temps sur le débogage. J'ai trouvé que la délégation de référentiel findOne()
appel de méthode à d'autres dépôts: MultipleJGitEnvironmentRepository
qui le délègue à NativeEnvironmentRepository
. À l'intérieur de ces délégués, la méthode findOne() n'utilise pas les propriétés propertySource du EnviromentRepository
principal injecté dans le contrôleur. Il crée un nouveau référentiel d'environnement avec une nouvelle liste de PropertySources et une nouvelle SpringApplication distincte. À la fin, cette liste ne contient pas mon CustomPropertySource
et c'est pourquoi findOne()
renvoie emptySources property dans l'objet Environment
résultant.
- Est-ce que je fais quelque chose de mal?
- est-
CustomPropertySourceLocator
(et/ouConsulPropertySourceLocator
) censé être utilisé (autowired/bootstrap) dansspring-cloud-config-server
ouspring-cloud-config-client
- peut offrir de nombreux différents types de
PropertySources
en même temps printemps-nuage-config-serveur, via l'interface REST (dire "différent" je veux dire tout Git, Consul et Zookeeper)?
Quelle version de Spring Cloud utilisez-vous? Jusqu'à très récemment, s'il y avait un autre bean 'EnvironmentRepository' dans le contexte, aucun des beans' EnvironmentRepository' par défaut ne serait créé, donc je suis confus sur la façon dont 'MultipleJGitEnvironmentRepository' ou' NativeEnvironmentRepository' serait créé dans votre cas.Pouvez-vous peut-être fournir un exemple d'application qui illustre le problème que vous voyez? –
J'utilise 1.1.0.RELEASE. – mombip
J'utilise 1.1.0.RELEASE. 'EnvironmentRepository' injecté dans' EnvironmentController' est initialement 'EnvironmentEncryptorEnvironmentRepository'. Il délègue l'appel à 'MultipleJGitEnvironmentRepository' qui hérite de l'implémentation de' AbstractScmEnvironmentRepository'. FindOne() à partir du dernier rend 'NativeEnvironmentRepository' passant' ConfigurableEnvironment' qui contient mon 'CustomPropertySource' dans la source de la propriété' bootstrapProperties'. Il semble que 'NativeEnvironmentRepository' le filtre à cause de la méthode" --spring.cloud.bootstrap.enabled = false "dans la méthode getArgs(). – mombip