Sukonfigūruokite tiesiogines ir per tarpinį serverį einančias RestTemplate bean Spring
Sukurkite atskirus RestTemplate bean HTTP tarpiniam serveriui ir aiškiai tiesioginiam JDK ryšiui, o ne perjunginėkite bendrą maršrutą aplink atskirus iškvietimus.
Kai kurie iškvietimai turi eiti per įmonės tarpinį serverį, o kita paslauga pasiekiama tiesiogiai. Suteikite tiems maršrutams atskirus RestTemplate egzempliorius, o ne keiskite vieną bendrą gamyklą, kai užklausos gali persidengti.
Esamoje Spring konfigūracijos klasėje:
@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);
}
Spring 6.2 JDK užklausų gamyklai Proxy.NO_PROXY suteikia aiškią tiesioginio ryšio politiką. Palikus gamyklos tarpinį serverį nenustatytą, leidžiamas įprastas URLConnection konfigūracijos kelias, kuris gali pasirinkti JVM tarpinį serverį.
Injektavimo vietoje naudokite @Qualifier reikiamam bean pasirinkti, pavyzdžiui, @Qualifier("directRestTemplate") RestTemplate rest. Vien tik dviejų bean apibrėžimas nepasirenka tarp jų dviprasmiškos priklausomybės atveju.
Šis pavyzdys pasirenka HTTP tarpinį serverį be autentifikavimo. Transportas, kuriam reikia tarpinio serverio autentifikavimo, gali būti sukuriamas atskirai su jo palaikomu kvalifikacijų teikėju, išlaikant tą pačią bean pasirinkimo tvarką. Spring 6 su Apache HttpClient 5 atveju apribokite tą teikėją tarpinio serverio prieigos tašku.
Kiti aplikacijos sąmoningai įdiegti interceptorai ar užklausų gamyklos vis dar priklauso jos pačios kliento konfigūracijai. Laikykite juos kartu su maršrutu, kuriam jų tikrai reikia.