在多线程环境中重用 JAX RS 客户机(使用 resteasy)
2022-09-02 13:28:23
根据文件,
“客户端是管理客户端通信基础架构的重物。客户端实例的初始化和处置可能是一个相当昂贵的操作。因此,建议在应用程序中仅构造少量的客户端实例。"
好的,我正在尝试在静态变量中缓存客户端本身和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;
}
但有时(并非总是)我会遇到一个例外:
基本客户端管理无效使用:连接仍已分配。请确保在分配另一个连接之前释放连接。
如何正确重用/缓存客户端/WebTarget?JAX RS 客户机 API 是否可行?或者我必须使用一些特定于框架的功能(resteasy/jersey),你能提供一些例子或文档吗?