2016-04-02 10 views
5

を使用して、Spring Cloud Configを検出し、設定を取得するアプリケーションはSpring-Bootです。 Vaultを統合して安全/機密情報を注入し、パラメータの読み込みと解決に問題が発生しています。 Vaultクライアントとして使用しているプロジェクトはvault-spring-boot-starterであり、ユーレカ経由でconfig-serverと一緒に使用していない限り有効です。bootstrap PropertySource ordering

具体的には、ユーレカのアクセスURLには、Vaultから取得されるパラメータ/認証情報が含まれています。すべてのコンポーネントが有効になっていると、DiscoveryClientがパラメータがまだ入力/置換されていないURLにアクセスしようとすると、Eurekaリクエストが失敗します。 @Orderとボールトスプリング・ブート・スターターのVaultBootstrapConfigurationで

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

を指定しようとすると

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

どんな影響を与えていないようです。私は問題がPropertySourcesが処理される順序に関連していると信じていますが、私はVaultのPropertySourceをEurekaより先に注入することができません。 DiscoveryClientおよび構成サーバーへのアクセスの前にカスタム/ボールトPropertySourceLocatorロジックを実行するように指示する方法を教えてください。

更新

我々は、ばねのクラウド版Angel.SR6を使用しています。

@Order(Ordered.HIGHEST_PRECEDENCE)注釈をVaultPropertySourceLocatorに追加しましたが、パラメータ解決はまだ機能しません。 Springのデバッグロギングを有効にすると、Vault PropertySourceは実際にそこにあると思われますが、何らかの理由で使用されていません。 VaultConfigurationがSmartLifecycleとOrdered(order = 0、phase = Integer.MIN_VALUE)を実装するようにコードを修正しました。私は何が起こっているのかを分離しようとするために、より多くのデバッグをしなければならないでしょう。

+0

使用しているスプリングクラウドのバージョンは何ですか? – spencergibb

+0

コードを見ると、おそらくhttps://github.com/markramach/vault-spring-boot-starter/blob/master/src/main/java/com/flyover/boot/vaultで '@ Order'が必要になります/config/VaultPropertySourceLocator.java – spencergibb

+0

つまり、 'PropertySourceLocator'はスプリングの順序付けメカニズムをサポートしています。 – spencergibb

答えて

1

私の問題を解決できました。私はSpring AOPやLTWなどいくつかのアプローチを試してみましたが、これは早すぎてインスタンスをインスタンス化しようとするものではありませんでした.VaultPropertySourceをEurekaのDiscoveryClientが呼び出す前に利用できるようにするためです。

マイワーキングソリューションが含まれています:以前のユーレカ豆と設定よりもVaultの豆をインスタンス化するための

は、インスタンスを開始:

  • @OrderedまたはVaultPropertySourceLocatorPriorityOrderedを実装します。私のVaultPropertySourceLocatorには、SmartLifecycleの実装も含まれています。これは、Nureeterministic出力が、Vault Beansよりも先に起こることがあるユーレカビーンのインスタンス化の一部で見られていたためです。私の注文はOrdered.HIGHEST_PRECEDENCEで、相はInteger.MIN_VALUEです。のリストでVaultPropertySource自己登録自体への環境参照を渡す

    • :ユーレカ豆/設定の配線が行われるときのパラメータを解決するために使用されるPropertySourceとしてVaultPropertySourceを登録するための

    ユーレカのBeanがインスタンシエーションおよびアンラッピング/解決中にEurekaClientConfigBeanプロパティの間にserviceUrlプロパティをインスタンス化して設定するときにそこに存在します。

関連する問題