JDBC连接池:连接重用?

hap*_*s10 14 java connection-pooling jdbc

根据我的理解,JDBC连接池(在基本级别)以这种方式工作:

  1. 在应用初始化期间创建连接并放入缓存
  2. 按需提供这些缓存的连接到应用程序
  3. 一个单独的线程维护连接池,执行以下活动:
    • 丢弃已使用的连接(关闭)
    • 创建新连接并添加到缓存以维护特定的连接数

但是,每当我在JDBC连接池讨论中听到"连接重用"这个术语时,我就会感到困惑.何时进行连接重用?

这是否意味着连接池为两个不同的数据库交互提供相同的连接(不关闭它)?或者,有没有办法继续使用连接,即使它在数据库调用后关闭?

ska*_*man 12

连接池通过重用连接来工作.应用程序从池中"借用"连接,然后在完成时"返回"它.然后将连接再次分发给应用程序的另一部分,甚至是不同的应用程序.

只要相同的连接不是由两个线程同时使用,这是完全安全的.

连接池的关键是避免在可能的情况下创建新连接,因为它通常是一项昂贵的操作.重用连接对性能至关重要.


Tim*_*sen 10

连接池不提供驱动程序的实际Connection实例,但返回包装器.当您从池中的Connection实例上调用'close()'时,它不会关闭驱动程序的Connection,而只是将打开的连接返回到池中,以便可以重复使用它(请参阅skaffman的答案).

  • 这取决于您正在使用的特定连接池类型,例如`DataSource`或Commons DBCP-style.轻量级池只能返回原始的`Connection`,并依赖于不调用`close()`的应用程序代码. (2认同)