Direkte und über Proxy laufende RestTemplate-Beans in Spring konfigurieren
Erstellen Sie getrennte RestTemplate-Beans für einen HTTP-Proxy und eine ausdrücklich direkte JDK-Verbindung, statt eine gemeinsame Route um einzelne Aufrufe herum umzuschalten.
Manche Aufrufe müssen über den Unternehmensproxy laufen, während ein anderer Dienst direkt erreicht wird. Geben Sie diesen Routen eigene RestTemplate-Instanzen, statt eine gemeinsame Factory zu verändern, während Anfragen sich überlappen können.
Innerhalb einer bestehenden Spring-Konfigurationsklasse:
@Bean("directRestTemplate")
RestTemplate directRestTemplate() {
var factory = new SimpleClientHttpRequestFactory();
factory.setProxy(java.net.Proxy.NO_PROXY);
return new RestTemplate(factory);
}
@Bean("proxyRestTemplate")
RestTemplate proxyRestTemplate() {
var factory = new SimpleClientHttpRequestFactory();
factory.setProxy(new java.net.Proxy(
java.net.Proxy.Type.HTTP,
new java.net.InetSocketAddress("proxy.example", 8080)));
return new RestTemplate(factory);
}
Bei der JDK-Request-Factory von Spring 6.2 liefert Proxy.NO_PROXY eine ausdrückliche Direktverbindungsrichtlinie. Lässt man den Proxy der Factory ungesetzt, wird stattdessen der gewöhnliche URLConnection-Konfigurationsweg erlaubt, der einen JVM-Proxy auswählen kann.
Verwenden Sie @Qualifier an der Injektionsstelle, um das benötigte Bean auszuwählen, zum Beispiel @Qualifier("directRestTemplate") RestTemplate rest. Allein das Definieren der beiden Beans entscheidet bei einer mehrdeutigen Abhängigkeit nicht zwischen ihnen.
Dieses Beispiel wählt einen nicht authentifizierten HTTP-Proxy. Ein Transport, der Proxy-Authentifizierung benötigt, kann separat mit seinem unterstützten Credential-Provider aufgebaut werden, während dieselbe Bean-Auswahl beibehalten wird. Für Spring 6 mit Apache HttpClient 5 begrenzen Sie diesen Provider auf den Proxy-Endpunkt.
Andere Interceptoren oder Request-Factories, die die Anwendung bewusst installiert, gehören weiterhin zu ihrer eigenen Client-Konfiguration. Behalten Sie sie bei der Route, die sie tatsächlich benötigt.