zig*_*ggy 4 java rest spring jersey java-ee
我有一个服务类,它有许多方法可以对Spring REST服务进行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,Client和WebResource的新实例.改变上述内容并将ClientConfig,Client和WebResource作为类级实例变量的副作用是什么?即改为:
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()方法,我可以按原样离开它们,只需关闭方法内的资源.
Per*_*ion 11
来自Jersey文档:
对于客户:
创建WebResource实例的方法是线程安全的.修改配置和/或过滤器的方法不保证是线程安全的.
创建客户端实例是一项昂贵的操作,实例可能会使用并保留许多资源.因此,建议重新使用Client实例来创建需要相同配置设置的WebResource实例
对于WebResource:
创建请求和返回响应的方法是线程安全的.修改过滤器的方法不保证是线程安全的
虽然没有明确的并发文档ClientConfig,但从源代码中可以清楚地看到它在多线程环境中的安全性.该Client班还线程安全的,只留下WebResource需要考虑.根据它的文档,我会WebResource为每个线程专门提供一个新的,这意味着你的代码应该更像这样:
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;
}
| 归档时间: | 
 | 
| 查看次数: | 6220 次 | 
| 最近记录: |