Activiti REST 5.22+J2EE环境下HTTP客户端频繁启停问题求助
解决Activiti REST HTTP客户端频繁启停的问题
你遇到的问题核心在于每次调用getClientResource都会创建全新的ClientResource实例,而每个ClientResource默认会初始化一个独立的HTTP客户端。当请求完成后,这个客户端会被自动停止,所以才会反复看到"Starting/Stopping the default HTTP client"的日志,同时还会带来不必要的性能损耗。
解决方案:复用全局HTTP客户端
我们可以创建一个全局共享的HTTP客户端实例,让所有ClientResource复用它,彻底避免频繁创建和销毁客户端的问题。具体修改步骤如下:
初始化全局HTTP客户端
在你的类中添加静态初始化块,提前创建并配置好可复用的HTTP客户端:// 全局复用的HTTP客户端实例 private static HttpClient httpClient; static { // 创建默认HTTP客户端 httpClient = new DefaultHttpClient(); // 配置全局基本认证信息 UsernamePasswordCredentials credentials = new UsernamePasswordCredentials("kermit", "kermit"); httpClient.getState().setCredentials(AuthScope.ANY, credentials); }修改
getClientResource方法
让每个ClientResource绑定全局客户端,不再创建新的客户端实例:private static ClientResource getClientResource(String uri) { ClientResource resource = new ClientResource(uri); // 绑定全局共享的HTTP客户端 resource.setHttpClient(httpClient); // 此处无需再调用setChallengeResponse,因为客户端已提前配置好认证信息 return resource; }
补充说明
- 修改后,所有请求都会复用同一个HTTP客户端,日志里的启停信息就不会反复出现了,同时也能提升请求处理的性能。
- 在J2EE环境中,你可以配合应用的生命周期管理,在应用启动时初始化这个客户端,在应用关闭时调用
httpClient.stop()来优雅销毁资源(按需操作即可)。
内容的提问来源于stack exchange,提问作者mobarki
相关产品推荐
相关产品推荐

