2013-09-27 80 views
2

我有基於apache HttpClient的java應用程序。我想在不更改應用程序的情況下增加套接字超時(應用程序中沒有超時設置)。我怎樣才能通過系統屬性(或其他方式沒有更改應用程序)呢?通過系統屬性爲HttpClient設置套接字超時

+0

或其他方式 - >或其他方式不改變應用程序 – cynepnaxa

回答

1

你可以使用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); 

從屬性文件讀取超時並將其傳遞給此代碼段。

+0

謝謝!但我想在不更改代碼的情況下增加套接字超時。 – cynepnaxa

1

不是直接的,但你可以在代碼中輕鬆地做到這一點:

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

(注意Integer.getInteger(String, int)從給定的系統屬性中讀取一個整數值)

+0

謝謝!但我想在不更改代碼的情況下增加套接字超時。 – cynepnaxa