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的正确方法。 –