Spring에서 직접 및 프록시 RestTemplate 빈 구성하기
호출마다 공유 경로를 전환하는 대신 HTTP 프록시와 명시적 직접 JDK 연결을 위한 별도의 RestTemplate 빈을 만듭니다.
일부 호출은 회사 프록시를 사용해야 하고 다른 서비스는 직접 접근합니다. 요청이 겹칠 수 있으므로 공유 팩터리를 바꾸는 대신 해당 경로에 별도의 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에서는 해당 공급자를 프록시 엔드포인트로 한정하십시오.
애플리케이션이 의도적으로 설치한 다른 인터셉터나 요청 팩터리는 여전히 자체 클라이언트 구성에 속합니다. 실제로 필요한 경로와 함께 유지하십시오.