tomcat

时间:2015-08-01 08:18:10

标签: java spring tomcat proxy resttemplate

我正在休息时对tomcat进行间歇性问题。 设置:

ApplicationA portX上的独立tomcat上运行

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

以下参数将添加到bash配置文件中的JVM_OPTS -Dhttp.proxyHost = [host] -Dhttp.proxyPort = [port] -Dhttp.nonProxyHosts = localhost

应用程序A使用Spring RestTemplate对应用程序B进行休息调用,并获得503错误(服务不可用)响应。

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

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

此问题间歇性地发生,但一旦启动,它将一直持续到我重新启动ApplicationA tomcat服务器。

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

任何指针,帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

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

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

中明确设置

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

解决方案是为两个休息调用用户分隔httpClient个对象。