Spring'da to'g'ridan-to'g'ri va proksi orqali ishlaydigan RestTemplate bean'larini sozlang
Har bir chaqiruv atrofidagi umumiy marshrutni almashtirish o'rniga HTTP proksisi va aniq to'g'ridan-to'g'ri JDK ulanishi uchun alohida RestTemplate bean'larini yarating.
Ba'zi chaqiruvlar korporativ proksidan o'tishi kerak, boshqa xizmatga esa to'g'ridan-to'g'ri erishiladi. So'rovlar bir-biriga ustma-ust tushishi mumkinligi sababli bitta umumiy fabrikani o'zgartirish o'rniga bu marshrutlarga alohida RestTemplate nusxalarini bering.
Mavjud Spring konfiguratsiya sinfi ichida:
@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 ning JDK so'rov fabrikasi uchun Proxy.NO_PROXY aniq to'g'ridan-to'g'ri ulanish siyosatini beradi. Fabrika proksisini sozlanmagan holda qoldirsangiz, buning o'rniga odatiy URLConnection konfiguratsiya yo'liga ruxsat beriladi va u JVM proksisini tanlashi mumkin.
Kerakli bean'ni tanlash uchun in'ektsiya nuqtasida @Qualifier dan foydalaning, masalan @Qualifier("directRestTemplate") RestTemplate rest. Faqat ikkita bean'ni e'lon qilish noaniq bog'liqlik uchun ularning o'rtasida tanlov qilmaydi.
Bu misol autentifikatsiyasiz HTTP proksisini tanlaydi. Proksi autentifikatsiyasi kerak bo'lgan transportni o'sha bean tanlash tartibini saqlab, uning qo'llab-quvvatlanadigan hisob ma'lumotlari provayderi bilan alohida qurish mumkin. Apache HttpClient 5 bilan Spring 6 uchun o'sha provayderni proksi oxirgi nuqtasi bilan cheklang.
Ilova ataylab o'rnatgan boshqa interceptorlar yoki so'rov fabrikalari hali ham uning o'z mijoz konfiguratsiyasiga tegishli. Ularni haqiqatan kerak bo'lgan marshrut bilan birga saqlang.