我正在休息时对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代理设置,而无需在代码中进行任何其他处理。
任何指针,帮助表示赞赏。
答案 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
个对象。