【问题标题】:Connection pooling clarification连接池说明
【发布时间】:2012-03-06 17:41:44
【问题描述】:

我正在使用具有以下值的连接池:

最小连接数=1,清除策略=整个池,年龄超时=0。

我有以下疑问:

  1. 如果我有 5 个连接并且要清除这些连接,那么所有 5 个连接都将被清除或仍将保持 1 个连接(因为最小连接设置为 1)?
  2. 如果要保持最小连接,那么将选择哪个连接,即使用最新、最旧或任何其他连接?
  3. 有什么方法可以显式地将连接逻辑地返回到池中(比如使用 connection.close() 之类的语句或使用类似的语句)?
  4. 有没有办法找出我正在使用的连接池类型?

【问题讨论】:

  • “有没有办法找出我正在使用的连接池类型?” - 你需要告诉我们,然后我们才能回答其余的问题。
  • 你能指导我怎么做吗

标签: jdbc connection-pooling


【解决方案1】:
  1. 清除策略通常与陈旧的连接有关。 “清除池”是指何时 检测到断开的连接,清除池,而不仅仅是断开的连接 连接。如果要清除所有连接,它将清空池,然后创建 1 个新连接。任何等待连接的人都会阻塞,直到在池中创建连接。
  2. 堆栈溢出的人可能无法回答这个问题 问题......但这真的很重要吗?为什么你会想要 “知道”这个?
  3. 是的,通过返回来结束您当前的交易 你的方法,让它提交或回滚。如果您使用 XA (全局)事务,您必须完成全局事务 交易。
  4. 定义“类型”?我们有哪些选择?

编辑 4: 如果您在应用程序容器中(听起来像您),则无法定义“类型”。容器提供了它自己的实现。例如,IBM Websphere 提供了 IBM 专有的 IBM 池实现。 (它也恰好很烂)

【讨论】:

  • 3.是的,通过从您的方法返回并让它提交或回滚来结束当前事务。如果您使用的是 XA(全局)事务,则必须使用全局事务。
  • 参考第三点。我只是向数据库触发选择查询。即使这样我还需要提交/回滚还是会自动完成?
  • 如果您参与全局事务,即使使用 select 语句,您也可以锁定所使用的行。
猜你喜欢
  • 2012-02-29
  • 2019-08-03
  • 1970-01-01
  • 2019-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-20
  • 1970-01-01
相关资源
最近更新 更多