2016-04-02 28 views
5

Mamy aplikację Spring-Boot, w której używamy Eureka do odkrycia Spring Cloud Config i odzyskania konfiguracji. Integrujemy Vault, aby wprowadzić bezpieczne/poufne informacje i mamy problemy z ładowaniem i rozdzielczością parametrów. Projekt, którego używamy jako klienta Vault, to vault-spring-boot-starter i działa wspaniale, o ile nie używamy go razem z serwerem konfiguracyjnym za pośrednictwem eureka.bootstrap PropertySource ordering

Adres URL Eureka zawiera w szczególności parametry/referencje pobierane z Vault. Po włączeniu wszystkich komponentów żądanie Eureka kończy się niepowodzeniem, gdy DiscoveryClient próbuje uzyskać dostęp do adresu URL, w którym parametry nie zostały jeszcze wypełnione/wymienione.

(Example: http://${user}:${pass}.....)

Próbując określić @Order i

@AutoConfigureBefore({EurekaClientAutoConfiguration.class, DiscoveryClientConfigServiceAutoConfiguration.class})

w skarbcu sprężynowym rozruchu rozrusznik za VaultBootstrapConfiguration wydają się nie mieć żadnego wpływu. Uważam, że problem związany jest z porządkiem, w którym przetwarzane są Źródła Zasobów, ale nie jestem w stanie skutecznie wstrzyknąć Zasobu Własności Vault przed Eureka. W jaki sposób możemy nakazać logikę Custom/Vault PropertySourceLocator wykonać przed uzyskaniem dostępu do serwera DiscoveryClient i serwera konfiguracji?

Aktualizacja

Używamy wiosna chmura wersji Angel.SR6.

Dodałem adnotację @ Ordered (Ordered.HIGHEST_PRECEDENCE) do VaultPropertySourceLocator zgodnie z zaleceniami, ale rozdzielczość parametru nadal nie działa. Po włączeniu rejestrowania debugowania wiosennego uważam, że Vault PropertySource rzeczywiście istnieje, ale z jakiegoś powodu nie jest używany. Zmodyfikowałem kod tak, aby VaultConfiguration implementował SmartLifecycle i Zamówione (z order = 0 i phase = Integer.MIN_VALUE), co mogło mieć wpływ na rzeczy. Będę musiał zrobić więcej debugowania, aby spróbować wyizolować to, co się dzieje.

+0

Jakiej wersji wiosennej chmury używasz? – spencergibb

+0

Patrząc na kod, prawdopodobnie potrzebujesz '@ Order' na https://github.com/markramach/vault-spring-boot-starter/blob/master/src/main/java/com/flyover/boot/vault /config/VaultPropertySourceLocator.java – spencergibb

+0

Innymi słowy, mechanizm zamawiania sprężyn mechanizmu wsparcia właściwości PropertySourceLocator. – spencergibb

Odpowiedz

1

Udało mi się rozwiązać mój problem. Próbowałem kilku różnych podejść, w tym Spring AOP i LTW, które nie działały jako próby zaimplementowania tych aspektów zbyt wcześnie - aby VaultPropertySource był dostępny przed wykonaniem połączenia przez DiscoveryClient Eureka.

Mam roztwór roboczy obejmuje:

Dla instancji fasola Vault wcześniej niż Eureka fasoli i konfiguracji zaczyna instancji:

  • @Ordered lub wykonawczych PriorityOrdered w VaultPropertySourceLocator. Moje VaultPropertySourceLocator zawiera także implementację SmartLifecycle, ponieważ widziałem niedeterministyczny wynik z częściami wystąpienia komponentu Eureka, które czasami mają miejsce przed fasolami Vault. Moje zamówienie to Ordered.HIGHEST_PRECEDENCE, a faza to Integer.MIN_VALUE.

Do rejestracji VaultPropertySource jako PropertySource, która jest używana do rozwiązywania parametry przy Eureka fasola/okablowanie konfiguracja odbywa się:

  • Przechodząc w odniesieniu środowiska do VaultPropertySource które self-rejestruje się w liście z Środowiskowe ŹródłaŚrodowiska i są tam, gdzie komponenty Eureka tworzą instancję i ustawiają właściwość serviceUrl podczas tworzenia i rozpakowywania/rozwiązywania właściwości EurekaClientConfigBean.