gpt4 book ai didi

java - 将基本数据源与连接池数据源混合在一起 : when to call close()?

转载 作者:行者123 更新时间:2023-11-29 09:19:59 24 4
gpt4 key购买 nike

我正在向我们的 Java 应用程序添加连接池。

该应用程序可以与不同的 RDBMS 配合使用,既可以作为桌面应用程序,也可以作为 headless Web 服务。基本实现在桌面模式下运行良好(rdbms = derby)。当作为 Web 服务(rdbms = mysql)运行时,我们发现需要连接池才能获得良好的并发行为。

我最初的方法是在启动时使用依赖项注入(inject)来决定使用基本数据源还是连接池数据源。

这种情况下的问题是我不知道何时调用connection.close()。我的理解是,使用连接池时,应该在每次查询后 close() ,以便可以回收连接对象。但当前的非池化实现会尝试尽可能长时间地保留 Connection 对象。

这个问题有解决办法吗?有没有办法回收基本连接对象?如果我不使用线程池连接对象调用connection.close(),会发生什么情况?

或者混合这两种连接策略只是一个糟糕的设计?

最佳答案

如果我理解正确的话,本质上你是通过尽可能长时间地保持连接来实现自己的池实现。如果此策略成功(即程序的行为如您所描述的那样),那么您已经拥有自己的池了。添加池唯一能给你带来的好处是提高建立新连接时的响应时间(因为你不会真正建立一个连接,你将从池中获取它),这显然不会经常发生.

所以,我会回到这个问题背后的假设:您的并发性能问题实际上与数据库池有关吗?如果您在 MySQL 而不是 Derby 中使用事务,这可能是并发问题的一个重要原因,作为不同潜在原因的示例。

要直接回答您的问题,请始终使用数据库池。它们的开销非常小,当然可以更改代码以快速释放连接(即,当请求完成时,而不是只要用户打开屏幕),而不是永远保留它们。

关于java - 将基本数据源与连接池数据源混合在一起 : when to call close()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2321403/

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