连接池

在频繁创建和销毁连接对象的应用场景中,使用连接池能够大幅降低创建和销毁连接对象的代价,进而提高程序运行效率并简化连接管理。

作用

连接池实现主要采用池化思想,将多个连接放在一个连接池中进行管理。当要执行任务时,只需直接向连接池提交任务即可,连接池会自动将任务分配给池中的某一个连接。

与直接声明连接对象来执行任务不同的是,连接池的连接对象在创建连接池时就已经创建好;在任务执行结束后也不会立即销毁,而是等待下一个任务,直到所有已创建的连接随同连接池一起关闭。因此连接池一大好处是:当程序需要频繁创建和销毁连接对象时,使用连接池会大大降低创建和销毁对象所需代价,进而提高程序运行效率。此外,在将连接的管理权交给连接池后用户将无需再管理连接,从而减轻其编程压力。

适用场景
  • Java 代码中具有较多连接对象。
  • 连接对象管理起来较为复杂。
  • 连接对象需要频繁创建和销毁。

两种连接池

Java API 同时提供 SimpleDBConnectionPool 连接池和 ExclusiveDBConnectionPool 连接池。

  • SimpleDBConnectionPool 连接池符合标准连接池的定义,提供连接池的初始化与关闭,连接的获取与释放等常用方法。在构造完连接池后,用户可以通过 getConnection 方法获取一个连接进行使用;在使用完毕后通过 connection.close() 释放连接,使其重回连接池并更新为闲置状态。此后该连接可以再次被获取使用。
  • ExclusiveDBConnectionPool 连接池的机制则与任务有关。在构造完连接池后,用户需要调用连接池的 execute 方法来执行 BasicDBTask 任务,后续亦需要使用 BasicDBTask 的相关方法以执行脚本、查询执行状态与结果等,如通过 getResult 方法获取该任务的执行结果。