ਕੁਝ ਕਾਲਾਂ ਨੂੰ ਕਾਰਪੋਰੇਟ ਪ੍ਰੌਕਸੀ ਵਰਤਣੀ ਹੀ ਪੈਂਦੀ ਹੈ ਜਦੋਂ ਕਿ ਕੋਈ ਹੋਰ ਸੇਵਾ ਸਿੱਧੀ ਪਹੁੰਚਦੀ ਹੈ। ਜਦੋਂ ਬੇਨਤੀਆਂ ਓਵਰਲੈਪ ਹੋ ਸਕਦੀਆਂ ਹਨ ਤਾਂ ਇੱਕ ਸਾਂਝੀ ਫੈਕਟਰੀ ਬਦਲਣ ਦੀ ਥਾਂ ਉਨ੍ਹਾਂ ਰਸਤਿਆਂ ਨੂੰ ਵੱਖਰੇ 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 ਲਈ, ਉਸ ਪ੍ਰਦਾਤਾ ਨੂੰ ਪ੍ਰੌਕਸੀ ਐਂਡਪੌਇੰਟ ਤੱਕ ਸੀਮਿਤ ਰੱਖੋ।

ਐਪਲੀਕੇਸ਼ਨ ਵੱਲੋਂ ਜਾਣਬੁੱਝ ਕੇ ਸਥਾਪਿਤ ਕੀਤੇ ਹੋਰ ਇੰਟਰਸੈਪਟਰ ਜਾਂ ਬੇਨਤੀ ਫੈਕਟਰੀਆਂ ਅਜੇ ਵੀ ਇਸ ਦੀ ਆਪਣੀ ਕਲਾਇੰਟ ਕਨਫਿਗਰੇਸ਼ਨ ਦਾ ਹਿੱਸਾ ਹਨ। ਉਨ੍ਹਾਂ ਨੂੰ ਉਸ ਰਸਤੇ ਨਾਲ ਰੱਖੋ ਜਿਸ ਨੂੰ ਸੱਚਮੁੱਚ ਉਨ੍ਹਾਂ ਦੀ ਲੋੜ ਹੈ।

ਸੰਬੰਧਿਤ ਲੇਖ