Java 泽西岛客户服务-关闭资源

Java 泽西岛客户服务-关闭资源,java,spring,rest,jakarta-ee,jersey,Java,Spring,Rest,Jakarta Ee,Jersey,我有一个服务类,它有许多方法对SpringREST服务进行REST调用。 每个方法如下所示: public void getUser() { ClientConfig config = new DefaultClientConfig(); Client client = Client.create(config); WebResource service = client.resource(RESOURCE_URL); //

我有一个服务类,它有许多方法对SpringREST服务进行REST调用。 每个方法如下所示:

public void getUser() {

        ClientConfig config = new DefaultClientConfig();
        Client client = Client.create(config);
        WebResource service = client.resource(RESOURCE_URL);


        // Get response as String
        String response = service.path("/addUser").accept(MediaType.TEXT_PLAIN)
                .get(String.class);

        return response;
    }
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);

public void getUser() {         
    WebResource service = client.resource(RESOURCE_URL);

    // Get response as String
    String response = service
        .path("/addUser")
        .accept(MediaType.TEXT_PLAIN)
        .get(String.class);

        return response;
}
上述方法很好,但我有点担心,每次调用该方法时,都会创建ClientConfig、Client和WebResource的新实例。如果我更改上述内容并将ClientConfig、Client和WebResource作为类级实例变量,会有什么副作用?i、 e.更改为:

ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
WebResource service = client.resource(RESOURCE_URL);

public void getUser() {         

        // Get response as String
        String response = service.path("/addUser").accept(MediaType.TEXT_PLAIN)
                .get(String.class);

        return response;
    }

 public void getUserAccount() {         

        // Get response as String
        String response = service.path("/getUserAccount").accept(MediaType.TEXT_PLAIN)
                .get(String.class);

        return response;
    }
如果多个用户同时调用不同的方法,上述操作是否可能失败?构建上述结构的最佳方式是什么

如果Jersey客户端方法有close()方法,我可以让它们保持原样,只关闭方法中的资源

来自:

用于:

创建WebResource实例的方法是线程安全的。方法 不保证修改配置和/或筛选器的 线程安全

创建客户机实例是一项昂贵的操作,而且 实例可以利用并保留许多资源。因此 建议在创建时重用客户端实例 需要相同配置设置的WebResource实例

用于:

创建请求和返回响应的方法是线程安全的。 修改筛选器的方法不能保证线程安全

虽然没有关于
ClientConfig
的明确的并发文档,但从其源代码可以清楚地看出,在多线程环境中使用它是安全的。<代码>客户端类也是线程安全的,只考虑<代码> WebResource <代码>。基于它的文档,我将为每个线程指定一个新的
WebResource
,这意味着您的代码应该更像这样:

public void getUser() {

        ClientConfig config = new DefaultClientConfig();
        Client client = Client.create(config);
        WebResource service = client.resource(RESOURCE_URL);


        // Get response as String
        String response = service.path("/addUser").accept(MediaType.TEXT_PLAIN)
                .get(String.class);

        return response;
    }
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);

public void getUser() {         
    WebResource service = client.resource(RESOURCE_URL);

    // Get response as String
    String response = service
        .path("/addUser")
        .accept(MediaType.TEXT_PLAIN)
        .get(String.class);

        return response;
}

谢谢您能给我指一下您在回复中引用的文档吗?我们是否需要明确关闭webresource?