2012-06-30 41 views
3

我正在使用RestClient連接到遠程JSON API。 以前,在Spring 3.0中,我使用的是Commons HTTPClient。 由於舊式多線程連接管理器中的大量鎖定,我發現性能很低。爲Spring Web RestTemplate設置Apache HttpComponents PoolingClientConnectionManager

我現在想嘗試Apache HttpComponents 4.2,因爲它看起來他們固定了鎖定。 我想使用PoolingClientConnectionManager作爲DefaultHttpClient的構造函數參數,它將針對不同的類自動裝配。

挑戰在於設置PoolingClientConnectionManager連接管理器。我想要大量的併發連接到JSON API提供程序。這些使用HttpRoute對象來表示主機名。但是,如http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/conn/PoolingClientConnectionManager.html中所述,PoolingClientConnectionManager使用setMaxPerRoute(HttpRoute, int maxConnections)方法。

如何設置連接管理器Spring的context.xml文件,因爲它不使用簡單的setter?

回答

1

如何通過擴展PoolingClientConnectionManager進行封裝,然後使用表示路由/最大值的Bean創建setter。 IE瀏覽器。

// Your bean 
public class RouteMax() { 
    private HttpRoute httpRoute; 
    private int max; 
    ... setters/getters 
} 

// Extending the PoolingClientConnectionManager 
... 
public class CustomPoolingClientConnectionManager extends PoolingClientConnectionManager { 
... 
public setRouteMax(RouteMax routeMax) { 
    super.setMaxPerRoute(routeMax.getHttpRoute(), routeMax.getMax()); 
} 

..然後在您的Spring配置中,您可以使用RouteMax bean設置routeMax屬性。

1

在Spring context.xml文件,更好的方式來配置你的HttpClient與PoolingClientConnectionManager是:

<bean id="httpClient" class="org.apache.http.impl.client.DefaultHttpClient"> 
<constructor-arg> 
<bean class="org.apache.http.impl.conn.PoolingClientConnectionManager"> 
<property name="maxTotal" value="100" /> 
<property name="defaultMaxPerRoute" value="50" /> 
</bean> 
</constructor-arg> 
</bean> 

的maxTotal和defaultMaxPerRoute性能應按照說明書進行配置:

http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html#d5e627

相關問題