【发布时间】:2016-01-10 21:11:21
【问题描述】:
根据文档,
“客户端是管理客户端的重量级对象 通信基础设施。初始化和处置 客户端实例可能是一个相当昂贵的操作。因此是 建议在 应用。 "
好的,我正在尝试将 Client 本身和 WebTarget 实例缓存在一个静态变量中,在多线程环境中调用 someMethod():
private static Client client = ClientBuilder.newClient();
private static WebTarget webTarget = client.target("someBaseUrl");
...
public static String someMethod(String arg1, String arg2)
{
WebTarget target = entrTarget.queryParam("arg1", arg1).queryParam("arg2", arg2);
Response response = target.request().get();
final String result = response.readEntity(String.class);
response.close();
return result;
}
但有时(并非总是)我会遇到异常:
BasicClientConnManager 使用无效:连接仍然分配。 确保在分配另一个连接之前释放连接。
如何正确重用/缓存 Client/WebTarget?可以使用 JAX RS 客户端 API 吗?或者我必须使用一些特定于框架的功能(resteasy/jersey)你能提供一些示例或文档吗?
【问题讨论】:
标签: java multithreading jersey jax-rs resteasy