2

我正在使用Spring 4.0.3.RELEASE版本。我能夠成功地打電話。但是,我瞭解到HTTP連接很昂貴,並且想到使用連接池。我讀了幾篇文章,如thisthis。當我用Maven3包含依賴和編譯時,一切都很好。運行時出現問題。 通過此代碼,我得到了類未發現的異常PoolingHttpClientConnectionManager爲RestTemplate設置Http連接池時出現Websphere問題

public RestTemplate restTemplate(){ 
    HttpHost host = new HttpHost("localhost", 9081); 
    PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(); 
    // Increase max total connection to 200 
    cm.setMaxTotal(200); 
    cm.setDefaultMaxPerRoute(50);  
    cm.setMaxPerRoute(new HttpRoute(host), 20); 

    HttpClientBuilder httpClientBuilder = HttpClientBuilder.create().setConnectionManager(cm); 
    HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(
      httpClientBuilder.build()); 
    return new RestTemplate(requestFactory); 
} 

有了這個代碼,我得到HttpClients類未發現異常。

public RestTemplate restTemplate(){ 
     RestTemplate restTemplate = new RestTemplate(); 
     HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); 
     requestFactory.setConnectTimeout(20000); 
     requestFactory.setReadTimeout(20000);  
     restTemplate.setRequestFactory(requestFactory); 
     return restTemplate; 
    } 

我正在部署Websphere 8.5。我嘗試了不同版本的httpclient從4.0.1到4.5.2,不同的範圍(提供,編譯)沒有運氣。 提前感謝您提供正確方向的任何提示。

回答

1

所以,它基本上是一個Websphere 8+版本的問題,包括httpclient與他們的jvm庫。幸運的是,我們的企業級Websphere都是7.5.x版本。所以,如果我們將httpclient與耳朵捆綁在一起,它不會在生產或預生產中造成任何問題。

對於那些不得不使用Websphere 8.x版本的人,請使用共享孤立庫方法as defined here。我用我的本地8.5 Websphere,它工作得很整潔。

0

你應該停止應用程序,然後去websphere和 的管理模塊選項卡和「Class loader order」組合框中選擇「parent last」項目 ,然後啓動應用程序。問題解決了...

+0

這不是正確的方法。正如標記的答案中所述,共享庫方法是引用與Websphere容器庫不同的jar的正確方法。 –