Konfigurasikan bean RestTemplate langsung dan melalui proksi dalam Spring
Cipta bean RestTemplate berasingan untuk proksi HTTP dan sambungan JDK yang eksplisit langsung, bukan menukar laluan dikongsi di sekeliling setiap panggilan.
Sesetengah panggilan mesti menggunakan proksi korporat manakala perkhidmatan lain dicapai secara langsung. Berikan contoh RestTemplate berasingan kepada laluan itu daripada menukar satu kilang dikongsi semasa permintaan boleh bertindih.
Di dalam kelas konfigurasi Spring yang sedia ada:
@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);
}
Untuk kilang permintaan JDK Spring 6.2, Proxy.NO_PROXY menyediakan dasar sambungan langsung yang eksplisit. Membiarkan proksi kilang tidak ditetapkan sebaliknya membenarkan laluan konfigurasi URLConnection biasa, yang mungkin memilih proksi JVM.
Gunakan @Qualifier pada titik suntikan untuk memilih bean yang diperlukan, contohnya @Qualifier("directRestTemplate") RestTemplate rest. Hanya mentakrifkan kedua-dua bean tidak memilih antara mereka untuk kebergantungan yang kabur.
Contoh ini memilih proksi HTTP tanpa pengesahan. Pengangkutan yang memerlukan pengesahan proksi boleh dibina secara berasingan dengan penyedia kelayakan yang disokongnya sambil mengekalkan susunan pemilihan bean yang sama. Untuk Spring 6 dengan Apache HttpClient 5, hadkan penyedia itu kepada titik akhir proksi.
Interceptor atau kilang permintaan lain yang sengaja dipasang oleh aplikasi masih tergolong dalam konfigurasi kliennya sendiri. Kekalkan mereka dengan laluan yang benar-benar memerlukannya.