连接池
在频繁创建和销毁连接对象的应用场景中,使用连接池能够大幅降低创建和销毁连接对象的代价,进而提高程序运行效率并简化连接管理。
作用
连接池实现主要采用池化思想,将多个连接放在一个连接池中进行管理。当要执行任务时,只需直接向连接池提交任务即可,连接池会自动将任务分配给池中的某一个连接。
与直接声明连接对象来执行任务不同的是,连接池的连接对象在创建连接池时就已经创建好;在任务执行结束后也不会立即销毁,而是等待下一个任务,直到所有已创建的连接随同连接池一起关闭。因此连接池一大好处是:当程序需要频繁创建和销毁连接对象时,使用连接池会大大降低创建和销毁对象所需代价,进而提高程序运行效率。此外,在将连接的管理权交给连接池后用户将无需再管理连接,从而减轻其编程压力。
- Java 代码中具有较多连接对象。
- 连接对象管理起来较为复杂。
- 连接对象需要频繁创建和销毁。
两种连接池
Java API 同时提供 SimpleDBConnectionPool
连接池和
ExclusiveDBConnectionPool
连接池。
SimpleDBConnectionPool
连接池符合标准连接池的定义,提供连接池的初始化与关闭,连接的获取与释放等常用方法。在构造完连接池后,用户可以通过getConnection
方法获取一个连接进行使用;在使用完毕后通过connection.close()
释放连接,使其重回连接池并更新为闲置状态。此后该连接可以再次被获取使用。ExclusiveDBConnectionPool
连接池的机制则与任务有关。在构造完连接池后,用户需要调用连接池的execute
方法来执行BasicDBTask
任务,后续亦需要使用BasicDBTask
的相关方法以执行脚本、查询执行状态与结果等,如通过getResult
方法获取该任务的执行结果。