每一次数据库访问请求都必须经历建立数据库连接、打开数据库、存取数据和关闭数据库连接等步骤,而连接打开数据库是一件既消耗资源又费时的工作,如果频繁的发生这种数据库操作,系统的性能必然会急剧下降,甚至会导致系统崩溃。数据库连接池技术就是解决这个问题常用的技术。
1、连接池的思想
数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”,预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需要从“缓冲池”中取出一个,使用完毕之后再放回去。
2、连接池原理
数据库连接池的实现,是有一个PoolManager类组成,这个类管理ConnectionPool类的多个实例,每个ConnectionPool管理JDBC Connection对象的一个池。
所有连接池客户都可以与PoolManager进行交互,也可以与Conncetion对象交互,但不可以直接与ConnectionPool对象进行交互,PoolManager保存了ConnectionPool对象的一个集合,每个对象负责唯一的JDBC URL和数据库账户。PoolManager的两个方法getConnection()和freeConnection()都有一个池名属性,该属性由PoolManager用户转发请求到正确的ConnectionPool对象。
3、连接池关键问题
(1)并发问题
为了使连接管理服务具有最大的通用性,必须考虑多线程环境,即并发问题。这个问题相对比较好解决,java自身提供了对并发管理的支持,使用Synchronized关键字即可确保线程是同步的。使用方法是直接在类方法前面加上Synchronized关键字。如:
//public Synchronized Connection getConnection()
(2)多数据库服务器和多用户
(3)事务处理
(4)连接池分配和释放
(5)连接池的配置和维护