数据库连接池介绍下,底层实现说下?
1、实现DataSource接口,并实现连接池功能的步骤:
-
在DataSource构造函数中批量创建与数据库的连接,并把创建的连接加入LinkedList对象中, 因为LinkedList是用链表实现的,对于增删实现起来比较容易, 因为每从池中取出一个连接,都要将这个对象从池不删除,当返回时就要添加回去。
-
实现getConnection方法,让getConnection方法每次调用时,从LinkedList中取一个Connection返回给用户(即要从池中删除一个对象)
-
当用户使用完Connection,调用Connection.close()方法时,Collection对象应保证将自己返回到LinkedList中
2、需要解决的问题
- 并发问题
为了使连接管理服务具有最大的通用性,必须考虑多线程环境,即并发问题。这个问题相对比较好解决,因为java语言自身提供了对并发管理的支持,使用synchronized关键字即可确保线程是同步的。使用方法为直接在类方法前面加上synchronized关键字,如:
publicsynchronized connection getconnection() - 多数据库服务器和多用户
对于大型的企业级应用,常常需要同时连接不同的数据库(如连接oracle和sybase)。如何连接不同的数据库呢?我们采用的策略是:设计一个符合单例模式的连接池管理类,在连接池管理类的唯一实例被创建时读取一个资源文件,其中资源文件中存放着多个数据库的url地址等信息。根据资源文件