You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何关闭RESTEasy代理对象关联的WebTarget与Client资源

RESTEasy代理模式下的资源清理问题

原始的RESTEasy代码片段如下:

UriBuilder FULL_PATH = UriBuilder.fromPath("http://127.0.0.1:8080/movies");

ResteasyClient client = (ResteasyClient)ClientBuilder.newClient();
ResteasyWebTarget target = client.target(FULL_PATH);
MoviesResource proxy = target.proxy(MoviesResource.class);

Movie movie = proxy.movieById(someId);

这种场景下,我们可以且应当手动关闭WebTarget或Client来释放已分配的资源。

但如果将代理对象的创建逻辑封装到单独类中,例如下面的Foo类:

public class Foo {
    private UriBuilder FULL_PATH = UriBuilder.fromPath("http://127.0.0.1:8080/movies");

    public MoviesResource getMoviesApi() {
        ResteasyClient client = (ResteasyClient)ClientBuilder.newClient();
        ResteasyWebTarget target = client.target(FULL_PATH);
        return target.proxy(MoviesResource.class);
    }
}

...

MoviesResource proxy = myFoo.getMoviesApi();
Movie movie = proxy.movieById(someId);
// A) 此处如何清理资源?

此时面临的问题是:无法通过代理实例获取到WebTarget、Client的引用,该如何关闭这些对象及其底层资源?如果不手动关闭,会收到如下警告:

RESTEASY004687: Closing a class org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient43Engine instance for you. Please close clients yourself.

尽管RESTEasy会自动帮我们清理资源,但显然不应该依赖这种自动行为。

*补充说明:相关讨论涉及JAX-RS Client的线程安全性与对象复用性,比如哪些对象可以安全复用等内容。


内容的提问来源于stack exchange,提问作者Marcel Stör

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 05:48:24