application.run より前に Spring Cloud Vault のプロキシファクトリをインストールする
通常のアプリケーション Bean が存在する前に起こりうる ConfigData アクセスには、bootstrap レジストリのフックを使用します。
Vault が ConfigData を提供する場合、その最初のリクエストは通常のプロキシカスタマイザー Bean が存在する前に発生することがあります。代わりに bootstrap レジストリを通じてリクエストファクトリをインストールしてください。
Spring Framework 6.1 以降のスタックの場合:
import java.net.InetSocketAddress;
import java.net.ProxySelector;
import java.net.http.HttpClient;
import org.springframework.http.client.JdkClientHttpRequestFactory;
import org.springframework.vault.config.AbstractVaultConfiguration
.ClientFactoryWrapper;
var http = HttpClient.newBuilder()
.proxy(ProxySelector.of(
new InetSocketAddress("proxy.example.net", 8080)))
.build();
application.addBootstrapRegistryInitializer(registry ->
registry.register(ClientFactoryWrapper.class, context ->
new ClientFactoryWrapper(
new JdkClientHttpRequestFactory(http))));application は既存の SpringApplication です。run を呼び出す前にこのイニシャライザを追加し、Vault の URI と認証設定はそのまま保持します。
ClientFactoryWrapper はこのファクトリを Vault の bootstrap インフラストラクチャに公開しますが、無関係な HTTP クライアントに対してアプリケーション全体の既定値をインストールするわけではありません。
プロジェクトの互換性のある Cloud Vault/Boot 依存関係セットを使用してください。Apache 4 の例を Spring Framework 6 の Apache 5 リクエストファクトリにコピーすることはできません。
プロキシアドレスも bootstrap より前に利用可能にしてください。公開プロキシを許可する経路にある公開到達可能な Vault サーバーの場合は、アプリケーション起動前に HTTP プロキシリスト から HTTP 候補を選びます。それが Vault にのみ保存されている場合、アプリケーションはその最初の Vault リクエストに必要な経路を発見できません。