Konfigurer direkte og proxyede RestTemplate-beans i Spring
Opret særskilte RestTemplate-beans til en HTTP-proxy og en eksplicit direkte JDK-forbindelse i stedet for at skifte en delt rute rundt om enkelte kald.
Nogle kald skal bruge virksomhedens proxy, mens en anden tjeneste nås direkte. Giv disse ruter særskilte RestTemplate-forekomster i stedet for at ændre én delt fabrik, mens forespørgsler kan overlappe.
Inde i en eksisterende 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);
}
Til Spring 6.2's JDK-forespørgselsfabrik giver Proxy.NO_PROXY en eksplicit direkte forbindelsespolitik. Lades fabrikkens proxy uindstillet, tillades i stedet den almindelige URLConnection-konfigurationsvej, som kan vælge en JVM-proxy.
Brug @Qualifier på injektionspunktet til at vælge den krævede bean, for eksempel @Qualifier("directRestTemplate") RestTemplate rest. Blot at definere de to beans vælger ikke mellem dem ved en tvetydig afhængighed.
Dette eksempel vælger en HTTP-proxy uden godkendelse. En transport, der kræver proxygodkendelse, kan bygges separat med sin understøttede legitimationsudbyder, mens den samme bean-udvælgelsesordning bevares. Til Spring 6 med Apache HttpClient 5, begræns denne udbyder til proxyens endepunkt.
Andre interceptorer eller forespørgselsfabrikker, som applikationen bevidst installerer, hører stadig til dens egen klientkonfiguration. Hold dem sammen med den rute, der faktisk har brug for dem.