数据库连接池相关概述
1.背景
- 实际开发中,当我们需要使用大量生命周期短的连接对象时,频繁的创建和销毁连接对象是非常消耗资源的,针对这种情况,就出现了数据库连接池,在连接池中放一些连接对象,用的时候从里面拿,用完之后在放回去,这样做的好处就是:节约资源,提高效率。
2.概述
- 数据库连接池也叫DBCP(Data Base Connection Pool),里面定义的是连接对象,用的时候可以从里面拿,用完之后在放回去。
3.分类
- DBCP:属于Apache软件基金组织的,不能自动回收空闲连接。
- C3P0:属于Apache软件基金组织的,能自动回收空闲连接,Java框架的底层源码中但凡涉及到数据库连接池内容的,都是使用C3P0.
- Druid:也叫德鲁伊,属于阿里巴巴公司的产品,采用分布式(事务)结构实现,能更好的兼容大数据框架
4.数据连接池的目的:
- 不用频繁的创建和销毁链接对象了。而是直接可以从连接池中获取连接对象
- 只是为了优化频繁创建和销毁对象连接对象这个步骤的,将连接对象从销毁改为自动归还数据库连接池
- JDBC核心操作步骤并没有被简化
- 虽然我们把连接对象从销毁该为自动归到连接池中了,但是对于我们代码的整体效率来讲,并没有得到提升,反而下降了。
- 因为我们现在创建的数据库连接池并没有实现共享,而是只在当前的类中出现了,且每执行一次,都要创建一个连接池,并且我们的连接池默认都有5个连接对象,我们只用1个,其他4个处于闲置的状态,这样我们代码的效率肯定降低了
- 如何优化这个问题:自定义C3P0Utils工具类,实现数据库连接池对象的共享,即:整个项目公用一个连接池对象。