为 RestTemplate 设置 Http 连接池时的 Websphere 问题

Websphere problems when setting up Http Connection Pool for RestTemplate

我正在使用 Spring 4.0.3.RELEASE 版本。我能够成功拨打 restful 电话。然而,我了解到HTTP连接是昂贵的并且想到了使用连接池。我读了一些像 this and this 这样的文章。当我将依赖项包含在 Maven3 中并进行编译时,一切都很好。问题出现在运行时。 使用此代码,我得到 class not found exception for PoolingHttpClientConnectionManager.

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);
}

使用此代码,我得到 class 未找到 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 上部署。我尝试了从 4.0.1 到 4.5.2 的不同版本的 httpclient,但没有成功。 预先感谢任何正确方向的提示。

所以,这基本上是 Websphere 8+ 版本的问题,包括带有 jvm 库的 httpclient。幸运的是,我们的 Enterprise Websphere 都是 7.5.x 版本。因此,如果我们将 httpclient 与 ear 捆绑在一起,它不会在生产或预生产中造成任何问题。

对于那些必须使用 Websphere 8.x 版本的人,请使用共享隔离库方法 as defined here。我将它用于我的本地 8.5 Websphere,它工作得非常好。

您应该停止该应用程序,然后转到 websphere 中的管理模块选项卡,然后 在 "Class loader order" 组合框中选择 "parent last" 项目 然后开始申请。问题已解决...