Configurar beans RestTemplate diretos e com proxy no Spring
Crie beans RestTemplate distintos para um proxy HTTP e uma conexão JDK explicitamente direta em vez de alternar uma rota compartilhada em torno de cada chamada.
Algumas chamadas precisam usar o proxy corporativo enquanto outro serviço é acessado diretamente. Dê a essas rotas instâncias RestTemplate distintas em vez de alterar uma fábrica compartilhada enquanto as requisições podem se sobrepor.
Dentro de uma classe de configuração Spring existente:
@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);
}
Na fábrica de requisições JDK do Spring 6.2, Proxy.NO_PROXY fornece uma política explícita de conexão direta. Deixar o proxy da fábrica sem configuração permite, em vez disso, o caminho comum de configuração URLConnection, que pode selecionar um proxy da JVM.
Use @Qualifier no ponto de injeção para selecionar o bean necessário, por exemplo @Qualifier("directRestTemplate") RestTemplate rest. Apenas definir os dois beans não escolhe entre eles para uma dependência ambígua.
Este exemplo seleciona um proxy HTTP sem autenticação. Um transporte que precise de autenticação de proxy pode ser construído separadamente com seu provedor de credenciais suportado, mantendo o mesmo arranjo de seleção de beans. Para Spring 6 com Apache HttpClient 5, limite esse provedor ao endpoint do proxy.
Outros interceptores ou fábricas de requisições instalados deliberadamente pela aplicação continuam pertencendo à sua própria configuração de cliente. Mantenha-os com a rota que realmente precisa deles.