일부 호출은 회사 프록시를 사용해야 하고 다른 서비스는 직접 접근합니다. 요청이 겹칠 수 있으므로 공유 팩터리를 바꾸는 대신 해당 경로에 별도의 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에서는 해당 공급자를 프록시 엔드포인트로 한정하십시오.

애플리케이션이 의도적으로 설치한 다른 인터셉터나 요청 팩터리는 여전히 자체 클라이언트 구성에 속합니다. 실제로 필요한 경로와 함께 유지하십시오.

관련 글