【问题标题】:Set socket timeout for HttpClient via system properties通过系统属性为 HttpClient 设置套接字超时
【发布时间】:2013-09-27 09:32:06
【问题描述】:

我有基于 apache HttpClient 的 java 应用程序。我想在不更改应用程序的情况下增加套接字超时(应用程序中没有可用的超时设置)。我如何通过系统属性(或其他不更改应用程序的方式)来做到这一点?

【问题讨论】:

  • 或其他方式 -> 或其他方式无需更改应用程序

标签: java apache-commons-httpclient


【解决方案1】:

不是直接的,但你可以在代码中轻松完成:

httpClient.getParams().setParameter("http.socket.timeout",
    Integer.getInteger("http.socket.timeout", <defaultValue>);

(注意Integer.getInteger(String, int)从给定的系统属性中读取一个整数值)

【讨论】:

  • 谢谢!但我想在不更改代码的情况下增加套接字超时。
【解决方案2】:

您可以使用 spring 读取系统属性,如下所示:

<bean id="yourBean" class="com.company.YourBean">
    <property name="httpClientTimeout" 
                value="#{ systemProperties['httpclient.timeout'] }"/>
    <!-- where httpclient.timeout is system variable-->
    <!-- other properties goes here....-->
</bean>

一旦有了超时值,就可以将超时设置为 HttpClient。

    HttpParams params = new BasicHttpParams();

    HttpConnectionParams.setConnectionTimeout(params, timeout);
    HttpConnectionParams.setSoTimeout(params, timeout);

    DefaultHttpClient httpclient = new DefaultHttpClient(params);

    HttpPost httpPost = new HttpPost(requestURL);
    httpPost.setEntity(new StringEntity(requestBody));
    HttpResponse response = httpclient.execute(httpPost);

从属性文件中读取超时并将其传递给此代码 sn-p。

【讨论】:

  • 谢谢!但我想在不更改代码的情况下增加套接字超时。
猜你喜欢
  • 2017-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-23
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多