Directe en via proxy lopende RestTemplate-beans configureren in Spring
Maak afzonderlijke RestTemplate-beans voor een HTTP-proxy en een expliciet directe JDK-verbinding in plaats van een gedeelde route rond afzonderlijke aanroepen om te schakelen.
Sommige aanroepen moeten via de bedrijfsproxy lopen, terwijl een andere dienst rechtstreeks wordt bereikt. Geef die routes afzonderlijke RestTemplate-instanties in plaats van één gedeelde factory te wijzigen terwijl verzoeken kunnen overlappen.
Binnen een bestaande Spring-configuratieklasse:
@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);
}
Voor de JDK-requestfactory van Spring 6.2 levert Proxy.NO_PROXY een expliciet direct verbindingsbeleid. Laat je de proxy van de factory oningesteld, dan wordt juist het gewone URLConnection-configuratiepad toegestaan, dat een JVM-proxy kan kiezen.
Gebruik @Qualifier op het injectiepunt om de benodigde bean te kiezen, bijvoorbeeld @Qualifier("directRestTemplate") RestTemplate rest. Alleen de twee beans definiëren kiest bij een dubbelzinnige afhankelijkheid niet tussen hen.
Dit voorbeeld kiest een HTTP-proxy zonder authenticatie. Een transport dat proxy-authenticatie nodig heeft, kan apart worden opgebouwd met zijn ondersteunde credential-provider terwijl dezelfde bean-selectie-indeling behouden blijft. Voor Spring 6 met Apache HttpClient 5, beperk die provider tot het proxy-eindpunt.
Andere interceptors of requestfactories die de applicatie bewust installeert, horen nog steeds bij de eigen clientconfiguratie. Houd ze bij de route die ze echt nodig heeft.