Vissa anrop måste gå via företagets proxy medan en annan tjänst nås direkt. Ge dessa rutter egna RestTemplate-instanser i stället för att ändra en delad fabrik medan förfrågningar kan överlappa.

Inuti en befintlig Spring-konfigurationsklass:

@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);
}

För JDK-förfrågningsfabriken i Spring 6.2 ger Proxy.NO_PROXY en uttrycklig policy för direkt anslutning. Lämnas fabrikens proxy oinställd tillåts i stället den vanliga URLConnection-konfigurationsvägen, som kan välja en JVM-proxy.

Använd @Qualifier vid injektionspunkten för att välja den böna som behövs, till exempel @Qualifier("directRestTemplate") RestTemplate rest. Att bara definiera de två bönorna väljer inte mellan dem vid ett tvetydigt beroende.

Det här exemplet väljer en HTTP-proxy utan autentisering. En transport som behöver proxyautentisering kan byggas separat med sin stödda autentiseringsleverantör medan samma bönvalsupplägg behålls. För Spring 6 med Apache HttpClient 5, begränsa den leverantören till proxyns slutpunkt.

Andra interceptorer eller förfrågningsfabriker som applikationen medvetet installerar tillhör fortfarande dess egen klientkonfiguration. Håll dem med den rutt som faktiskt behöver dem.

Relaterade artiklar