Java - 连接池中的数据库连接管理

时间:2016-05-03 09:23:51

标签: java database

对于我正在参加的编程课程,我想设计一个连接池。我一直在阅读这个概念,但有一件事听起来像是我的矛盾,那就是创建的连接保持打开的时间。

如果我理解正确,则会在应用程序启动时创建Connections的集合(池),并且可以请求获取连接。如果请求连接的资源完成了其操作,则连接将返回到此池,但据我所知,它永远不会关闭。

当我阅读其他文章时,我总是看到,尽快关闭连接并且永远不要打开它们是一种好习惯。

在应用程序生命周期内保持连接打开是否有任何问题?我知道在回收连接时需要清除结果集和语句,但是保持连接打开还有其他任何异议吗?

非常感谢您的投入!

3 个答案:

答案 0 :(得分:2)

连接池只是意味着提前创建,管理和维护连接对象。

当我们谈论连接池或连接管理时,有很多事情。

1。)如果我们对数据库进行频繁次调用,creating/closing connections的操作费用会高得多。最好保持一个连接池。然后,这些连接对象由池管理器管理,该管理器在客户端请求时提供连接,并在确定客户端已完成Connection对象时将它们返回到池中。

2。)当它来到多应用程序时,部署了更多的应用程序,并且每个应用程序实际上都以自己的频率命中数据库,1-2个应用程序可能命中数据库可能一次每小时左右。然后我们每次都可以进行新的连接。

  

在所有情况下,更重要的是我们在任务完成后释放资源。永远不应该有更多的联系   打开,长时间闲置。这可能会影响应用程序性能

大多数应用程序服务器具有2层连接池架构,其中池保存在应用程序服务器内存中。 应用程序服务器负责创建连接对象,将它们添加到池中,将它们分配给传入的请求,将已使用的连接对象返回,将它们返回池中等等。

<强>配置/管理

它非常易于配置 - maximum connectionsminimum connectionsmaximum number of idle connections等等。这些所有参数都可以由服务器管理员配置。启动时,服务器会创建一个固定数量(已配置的最小值)连接对象,并将它们添加到池中。一旦所有这些连接对象都通过提供那些许多客户端请求而耗尽,那么任何额外的请求都会导致创建一个新的连接对象,添加到池中,然后将该额外请求分配给服务器。

答案 1 :(得分:0)

java中的连接池概念提供了一些连接对象来执行数据库事务。 它因服务器而异,并且根据应用程序业务的使用情况,我们可以配置应该可用于接受资源的连接对象的数量。

  1. 是的,如果conncetion对象打开并且空闲超过指定的时间,则接受连接的延迟将处于休眠状态,甚至引用需要更多内存,并且存在内存泄漏的可能性。 因此,最好通过配置池来在一定时间范围之后关闭连接对象。
  2. 2.我们在JDBC语句中使用的连接是我们用于该事务的静态连接,而不是所有的连接。就像我们在服务器中配置它们并动态获取引用一样,它很容易维护没有内存泄漏并优化游泳池没有资源被空闲物体浪费或占用。

答案 2 :(得分:0)

连接池机制用于最小化创建和维护与底层数据库的连接的工作量。当服务器启动并识别出连接池时,它会打开与数据库的初始指定连接数,并使用这些连接,除非所有连接都忙;在这种情况下,它会在池中打开新的连接数。现在,大多数连接池提供程序允许您指定最小和最大连接数。因此,除非达到最大数量并且正在使用池中所有先前打开的连接,否则它将打开新连接以提供请求并将它们放入池中。服务器不断检查空闲连接的数量,如果发现空闲连接的数量多于此参数的配置值,则服务器只需关闭额外的空闲连接数,然后进行垃圾收集。