【问题标题】:spring async not releasing database connectionspring async 不释放数据库连接
【发布时间】:2017-12-24 06:29:44
【问题描述】:

技术栈
我正在使用 spring boot 1.3.5 作为休息服务,它在内部从数据库中获取数据。使用的 ORM 是 JOOQ,连接池管理由 BoneCP 完成......

要求
我有一个要求,我需要触发多个 sql 来获取数据,组合结果并将它们全部返回......

问题
我已经使用 spring async 实现了这一点,但是遇到了 spring sync 方法阻止数据库连接并且没有将它们释放到数据库池的问题。在几次点击后达到最大连接并且应用程序停止响应......

试试
一旦我从我的方法中删除 @Async 注释,它就可以正常工作..

请提出一个可能的解决方案来解决这个问题,我需要触发多个查询并组合结果。 如果bonecp中有任何设置在超时后将连接释放回池,那么如果有人帮助我,这也是另一种解决方案。

【问题讨论】:

  • “spring sync 方法阻塞了数据库连接”的原因是什么?是长时间运行的进程吗?
  • 查询运行时间不长..但结果已传递但数据库连接未释放回池
  • 你不是在执行查询后调用connection.close()返回连接池吗?
  • 如前所述,我将 boncep 与 spring boot 一起使用,因此打开连接和关闭由数据库池自动处理。我正在打开一个连接,因此无法关闭连接。

标签: spring multithreading jooq bonecp spring-async


【解决方案1】:

考虑以下解决方案。然后想想什么适合你的应用程序

  1. 增加 DB 中的连接限制
  2. 减少@Async 线程以减少连接的使用
  3. 设计您的@Async 块代码以使用来自池的一定数量的连接。因此,其余的连接将留作其他用途供应用程序使用。

【讨论】:

  • 1.增加 DB 中的连接限制 -->这无济于事,因为有时会提高限制。 2.减少@Async线程以减少连接的使用-->这总是3不能减少3。不知道该怎么做......任何帮助
猜你喜欢
  • 2016-05-11
  • 2017-05-04
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 2017-06-06
  • 2017-03-02
  • 2015-03-26
  • 1970-01-01
相关资源
最近更新 更多