JDBC 连接池:连接重用?

2022-09-03 13:37:31

根据我的理解,JDBC连接池(在基本级别上)的工作方式如下:

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

但是,每当我在 JDBC 连接池讨论中听到术语“连接重用”时,我都会感到困惑。连接重用何时发生?

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


答案 1

连接池的工作原理是重用连接。应用程序从池中“借用”连接,然后在完成后“返回”该连接。然后,连接再次分发给应用程序的另一部分,甚至是不同的应用程序。

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

连接池的关键点是尽可能避免创建新连接,因为它通常是一项代价高昂的操作。重用连接对于性能至关重要。


答案 2

连接池不会提供来自驱动程序的实际连接实例,但会返回一个包装器。当您从池中对连接实例调用“close()”时,它不会关闭驱动程序的连接,而只是将打开的连接返回到池,以便可以重用它(请参阅skaffman的答案)。


推荐