कुछ कॉल को कॉर्पोरेट प्रॉक्सी का उपयोग करना ही होता है जबकि किसी दूसरी सेवा तक सीधे पहुँचा जाता है। जब अनुरोध ओवरलैप हो सकते हैं तो एक साझा फ़ैक्ट्री बदलने के बजाय उन रूटों को अलग RestTemplate इंस्टेंस दें।

मौजूदा 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);
}

Spring 6.2 की JDK अनुरोध फ़ैक्ट्री के लिए, Proxy.NO_PROXY स्पष्ट सीधे कनेक्शन नीति देता है। फ़ैक्ट्री का प्रॉक्सी सेट न छोड़ने पर सामान्य URLConnection कॉन्फ़िगरेशन पथ की अनुमति मिलती है, जो JVM प्रॉक्सी चुन सकता है।

आवश्यक बीन चुनने के लिए इंजेक्शन पॉइंट पर @Qualifier का उपयोग करें, उदाहरण के लिए @Qualifier("directRestTemplate") RestTemplate rest। केवल दो बीन्स परिभाषित करना अस्पष्ट निर्भरता के लिए उनके बीच चयन नहीं करता।

यह उदाहरण बिना प्रमाणीकरण वाली HTTP प्रॉक्सी चुनता है। प्रॉक्सी प्रमाणीकरण चाहने वाले ट्रांसपोर्ट को उसी बीन-चयन व्यवस्था को बनाए रखते हुए उसके समर्थित क्रेडेंशियल प्रदाता के साथ अलग से बनाया जा सकता है। Apache HttpClient 5 के साथ Spring 6 के लिए, उस प्रदाता को प्रॉक्सी एंडपॉइंट तक सीमित रखें।

एप्लिकेशन द्वारा जानबूझकर इंस्टॉल किए गए अन्य इंटरसेप्टर या अनुरोध फ़ैक्ट्रियाँ अब भी उसके अपने क्लाइंट कॉन्फ़िगरेशन का हिस्सा हैं। उन्हें उसी रूट के साथ रखें जिसे वास्तव में उनकी आवश्यकता है।

संबंधित लेख