Niektoré wywołania muszą przechodzić przez firmowe proxy, a inna usługa jest osiągana bezpośrednio. Daj tym trasom osobne instancje RestTemplate, zamiast modyfikować jedną współdzieloną fabrykę, gdy żądania mogą się nakładać.

Wewnątrz istniejącej klasy konfiguracji Spring:

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

W fabryce żądań JDK Springa 6.2 Proxy.NO_PROXY zapewnia jawną politykę bezpośredniego połączenia. Pozostawienie proxy fabryki nieustawionego pozwala zamiast tego na zwykłą ścieżkę konfiguracji URLConnection, która może wybrać proxy JVM.

Użyj @Qualifier w punkcie wstrzyknięcia, aby wybrać wymagany bean, na przykład @Qualifier("directRestTemplate") RestTemplate rest. Samo zdefiniowanie obu beanów nie wybiera między nimi przy niejednoznacznej zależności.

Ten przykład wybiera proxy HTTP bez uwierzytelniania. Transport wymagający uwierzytelniania proxy można zbudować osobno z jego obsługiwanym dostawcą poświadczeń, zachowując ten sam układ wyboru beanów. Dla Springa 6 z Apache HttpClient 5 ogranicz tego dostawcę do punktu końcowego proxy.

Inne interceptory lub fabryki żądań celowo instalowane przez aplikację nadal należą do jej własnej konfiguracji klienta. Trzymaj je przy trasie, która naprawdę ich potrzebuje.

Powiązane artykuły