Spring RestTemplate - 需要释放连接吗?

2023-12-25

这是我的 Rest 模板配置,

    @Bean
    @Qualifier("myRestService")
    public RestTemplate createRestTemplate(@Value("${connection.timeout}") String maxConn) {
        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
         connectionManager.setMaxTotal(maxTotalConn);
         connectionManager.setDefaultMaxPerRoute(maxPerChannel);

        RequestConfig config = RequestConfig.custom().setConnectTimeout(100000).build();
        CloseableHttpClient httpClient = HttpClientBuilder.create().setConnectionManager(connectionManager)
                .setDefaultRequestConfig(config).build();
        ClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);

        RestTemplate restTemplate = new RestTemplate(factory);

        restTemplate.setErrorHandler(new RestResponseErrorHandler());
         restTemplate.setMessageConverters(createMessageConverters());

        return restTemplate;
    }

我使用 PoolingHttpClientConnectionManager 来管理连接。

它可以通过以下代码访问,

ResponseEntity<String> response = restClient.exchange( url, HttpMethod.GET, entity , String.class );

我是否需要在上述调用后释放连接,还是由 RestTemplate 处理。如果我们需要负责释放连接。

请有人解释/展示如何释放连接。


您应该将 ClientHttpRequestFactory 声明为 bean。通过将其声明为 bean,它就由 Spring bean 工厂管理,当应用程序关闭或 bean 超出范围时,它将调用工厂的 destroy 方法。 ClientHttpRequestFactory 的 destroy 方法将关闭底层 ClientConnectionManager 的连接池。您可以查看 Spring API 文档来了解这一点。

@Bean
public ClientHttpRequestFactory createRequestFactory(@Value("${connection.timeout}") String maxConn) {
    PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
     connectionManager.setMaxTotal(maxTotalConn);
     connectionManager.setDefaultMaxPerRoute(maxPerChannel);

    RequestConfig config = RequestConfig.custom().setConnectTimeout(100000).build();
    CloseableHttpClient httpClient = HttpClientBuilder.create().setConnectionManager(connectionManager)
            .setDefaultRequestConfig(config).build();
    return new HttpComponentsClientHttpRequestFactory(httpClient);
}

然后你可以使用这个 bean 来创建你的 RestTemplate:

@Bean
@Qualifier("myRestService")
public RestTemplate createRestTemplate(ClientHttpRequestFactory factory) {
    RestTemplate restTemplate = new RestTemplate(factory);

    restTemplate.setErrorHandler(new RestResponseErrorHandler());
    restTemplate.setMessageConverters(createMessageConverters());

    return restTemplate;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring RestTemplate - 需要释放连接吗? 的相关文章

随机推荐

  • 活动预订不会重新安排/取消

    我可以使用 gMail 标记安排活动 但是 如果我尝试重新安排活动 它只会在新时间制作第二个副本 并保持原始活动不变 如果我尝试取消某个活动 则什么也不会发生 我的确认示例如下 div div div div
  • Android 共享首选项不起作用

    我有一项服务 其中有4个全局静态int变量我有一个启动完成和呼叫事件的接收器 我想做的是每当执行 Call 事件接收器时保存这 4 个变量 并在执行 BOOT 接收器时检索它们 当然当我重新启动手机时 但两者都不起作用 另一件事设备重新启动
  • Powershell使用ODBC DSN而不是连接字符串从数据库读取

    我知道如何使用连接字符串从数据库读取值 即 建立数据库连接进行读取 conn New Object System Data SqlClient SqlConnection conn ConnectionString Server 10 10
  • GitHub Pages:如何将文本环绕在图像周围?

    我有一个 GitHub 博客页面 在博客页面中间的某个位置 我有一张图像 其中显示了以下 Markdown 内容 My Image pathto myimage png 这可以很好地显示图像 但我还想添加一个段落 包裹在图像的右侧 来描述图
  • bigquery 使用嵌套字段进行旋转

    我有一个带有架构的 bigquery 表 我想要这样的结果 flow timestamp channel name number of digits 2019 10 31 15 31 15 channel name 1 3 2019 10
  • Azure AD 在有效访问令牌上返回 Authentication_ExpiredToken

    我越来越Your access token has expired Please renew it before submitting the request 当我打电话时https graph windows net myorganiza
  • frisby 的 Get 方法不适用于 https

    我是弗里斯比测试的新手 今天发现无法访问https ip https ip来自 friby api 的地址 例如 frisby create my test get https 199 59 148 20 output connect er
  • Eclipse/MySQL 集成插件? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 我的顺风滚动 snap x 无法工作,您能找到解决方案吗?

    所以我使用 Tailwind CSS 但遇到了问题 所以我正在学习如何在顺风 CSS 上进行滚动捕捉 滚动对齐 y 有效 但滚动对齐 x 不起作用 我尝试了一切让我的代码滚动 snap x 但它不起作用 你们中的任何人都可以修复我的顺风代码
  • 霍夫变换 C# 代码 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 让我们看一下这个 C 实现 https github com andrewkirillov AForge NET blob a9453
  • iOS 中自定义 UIStatusBar

    有没有办法自定义UIStatusBar class 有关可以使用状态栏 或围绕状态栏 执行的操作的示例 请查看此 Github 项目 https github com myell0w MTStatusBarOverlay https git
  • 枚举构造函数(创建成员的成员)

    在 D 中 我试图创建一个成员有成员的枚举 我可以通过一个例子更好地解释我想要做什么 其中s and i代表我试图创建的子成员 在Python中 我可以这样做 class Foo enum Enum A A string 0 B B str
  • 在 VSCode 中禁用 Javascript 的特定错误消息?

    我在 JavaScript 中使用类属性 静态和普通 和装饰器 有没有办法启用其他 ES 阶段的代码突出显示或禁用它们的特定错误消息 VSCode 告诉我只能在 TypeScript 中使用类属性 因此它似乎可以识别它们 您可以使用以下命令
  • 如何给java足够的时间给变量赋值? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我有一个循环 在循环的末尾有一个String 被添加到ArrayList 在类中声明而不是方法 并在循环开始时说Stri
  • 如何发出数据流已完成的信号?

    我有一个类 它使用 TPL 数据流实现由 3 个步骤组成的数据流 在构造函数中 我将步骤创建为 TransformBlocks 并使用 LinkTo 将它们链接起来 并将 DataflowLinkOptions PropagateCompl
  • 在 PHP 7.4 中使用 FFI 加载库时出现问题

    我在新的 FFI 中使用 PHP 中的第三方 so 库时遇到问题 当我运行这段小代码时
  • 如何获取asp.net下拉列表的选定值并将其存储在会话变量中?

    Dim ename As String DropDownList SelectedItem Value 这个声明不起作用 任何帮助表示赞赏 我不确定这是否是您的问题 但如果您正在寻找所需的项目文本 而不是值 DropDownList Sel
  • 使用 Jquery 从第一个下拉列表中过滤第二个下拉列表

    Team 我有两个下拉菜单说 年 和 节 1 年份下拉菜单将有以下选项 显示全部 1 2 3 4 2 部分下拉菜单将有以下选项 所有部分 1 部分 A 1 部分 B 1 部分 C 2 部分 A 2 部分 B 3 部分 A 4 部分 A 4
  • 强制用户在 iOS 中以编程方式更新应用程序

    在我的 iOS 应用程序中 我启用了强制应用程序更新功能 是这样的 如果有严重的错误修复 在服务器中我们正在设置新的发行版本 在启动屏幕中 我正在检查当前的应用程序版本 如果它低于服务版本 则会显示一条更新应用程序的消息 我放置了 2 个按
  • Spring RestTemplate - 需要释放连接吗?

    这是我的 Rest 模板配置 Bean Qualifier myRestService public RestTemplate createRestTemplate Value connection timeout String maxCo