首页 > 解决方案 > Spring Boot 应用程序,RestTemplate 没有选择在 Java 选项中配置的代理

问题描述

有一些服务托管在互联网上。我的应用程序 Spring Boot 服务部署在 K8S 集群中。集群位于公司防火墙后面。当集群中部署的服务尝试与托管在 Internet 中的服务进行通信时,我是 OperationTimeOutException。REST 调用通过 RestTemplate 发生,在某些情况下它通过 feign 发生。无论哪种情况,它都不起作用。

当我启动微服务时,我提供了提供代理配置的 java 选项。

java -Dhttp.proxyHost= -Dhttp.proxyPort= -Dhttps.proxyHost= -Dhttps.proxyPort= myapp.jar

当我在创建 RestTemplate 时对代理进行硬编码时,如下所示,

SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
InetSocketAddress address = new InetSocketAddress(host,portNr);
Proxy proxy = new Proxy(Proxy.Type.HTTP,address);
factory.setProxy(proxy);
restTemplate.setRequestFactory(factory);

通信发生并且应用程序按预期工作。为什么 RestTemplate 无法选择 Java 选项中提供的代理设置?

我不想在代码中硬编码代理。

标签: spring-bootresttemplatehttp-proxyfeign

解决方案


推荐阅读