gpt4 book ai didi

java - 消费者没有返回到我的数据库连接池的连接

转载 作者:搜寻专家 更新时间:2023-10-30 20:11:41 25 4
gpt4 key购买 nike

我有一个数据库连接池。有些消费者从该池中获取连接。但我不能相信那些消费者,因为他们中的很多人都没有返回我的连接。因此,池挨饿,许多消费者也被迫等待无限。例如:

class Consumer{
void someMethod(){
Connection con=Pool.getConnection();
//some bloody steps which throws exception
con.goodBye();//giving back the connection to the pool
}
}

由于异常,也可能是因为傲慢,连接并不总是返回。我没有办法在消费者类中限制 Pool api 的使用。

我怎样才能恢复连接?(我没有办法强制消费者)我相信对此没有万无一失的解决方案(可能我不是那么聪明)。任何人仍然可以想出一个很好的解决方案。我得到的一种解决方案是检查 Consumer 类中是否发生任何异常,如果发生异常则完全收回连接力。

或者是否有任何新的革命性 DBPool 设计模式在这种类型的典型场景中不是很流行(即使我认为我的案例非常通用,任何人都可能忘记将连接返回给池。)

最佳答案

那是糟糕的客户端代码。代码应处理异常情况并在完成后关闭连接。

不过,如果没有这样做,您无法从代码中获知。如果它不这样做,那是客户端代码的错误和问题。

合理的超时是限制此问题的唯一方法,但它仍然不能最终“解决”它。

--

您在评论中提到该池由多个客户端共享。当然,这会将责任转回给您。

你能限制每个客户端一次只能使用 X 个连接吗?这样一来,至少他们一次只能捆绑这么多。

否则,您可以为每个客户端创建单独的池。这种方法只是将问题移到堆栈中,但可能是合适的,具体取决于所涉及的后勤工作。

关于java - 消费者没有返回到我的数据库连接池的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9193743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com