tomcat 上 JVM 代理参数的间歇性 503 问题

Intermittent 503 issue with JVM proxy parameters on tomcat

我在拨打休息电话时遇到 tomcat 上的间歇性问题。 设置:

ApplicationA 运行 独立 tomcat portX

ApplicationB 运行 在另一个独立 tomcat 在 portY tomcat 安装在同一台机器上。 Java 版本是 JRE6

以下参数已添加到 bash 配置文件中的 JVM_OPTS -Dhttp.proxyHost=[主机] -Dhttp.proxyPort=[端口] -Dhttp.nonProxyHosts=本地主机

应用程序 A 使用 Spring RestTemplate 对应用程序 B 进行 rest 调用,并收到 503 错误(服务不可用)响应。

正在使用的URL是http://localhost:portY/ApplicationB/restapipath

我的原因是对 localhost 的请求正在通过 JVM_OPTS 中定义的代理,但根据我的理解,应该在不使用任何代理的情况下调用所有 localhost url。

这个问题是间歇性发生的,但是一旦开始它就会一直持续到我重新启动 ApplicationA tomcat 服务器。

此外,我的理解是,通过 Spring RestTemplate 进行的任何调用都将遵循 JAVA_OPTS 代理设置,而无需在代码中进行任何额外处理。

任何指点,帮助不胜感激。

经过几个小时的挫折,我找到了解决方案。 问题是 我对 JVM 代理参数的理解不正确

bash 配置文件 -Dhttp.proxyHost=[host] -Dhttp.proxyPort=[port]JVM_OPTS 中的参数实际上在使用 Spring RestTemplate 时不会自动使用。这些参数必须使用 System.getProperty('http.proxyHost') 获取,然后在 DefaultHttpClient

中显式设置

现在我的代码中的问题是 applicationContext.xml 中定义了一个 httpClient bean,其余调用都在使用它。非代理 rest 调用工作正常,直到 with-proxy rest 调用使用代理详细信息更新 httpClient 对象。

解决方案是为两个 rest 调用使用单独的 httpClient 对象。