连接池

1、什么是连接池,优点是什么

1.1 连接池的定义

连接池是用于创建和管理数据库连接的缓冲池技术,缓冲池中的连接可以被任何需要他们的线程使用。当一个线程需要用JDBC对一个数据库操作时,将从池中请求一个连接。当这个连接使用完毕后,将返回到连接池中,等待为其他的线程服务。所以可以把连接池想象成一个水瓶,这个水瓶里面装着很多事先创好的连接,每当我们通过JDBC对数据库进行操作时,我们第一件事肯定是要先获取一个连接,此时我们就可以从这个瓶子中取一个连接,直接使用,用完之后我们再把这个连接放回到这个瓶子中,以待下次使用。

1.2 使用连接池的好处

第一、减少连接创建时间。连接池中的连接是已准备好的、可重复使用的,获取后可以直接访问数据库,因此减少了连接创建的次数和时间。

第二、控制资源的使用。如果不使用连接池,每次访问数据库都需要创建一个连接,这样系统的稳定性受系统连接需求影响很大,很容易产生资源浪费和高负载异常。连接池能够使性能最大化,将资源利用控制在一定的水平之下。连接池能控制池中的连接数量,增强了系统在大量用户应用时的稳定性。

第三、简化的编程模式。当使用连接池时,与每一个单独的线程能够像创建一个自己的JDBC连接一样操作,允许用户直接使用JDBC编程技术。

2、MyBatis中的连接池

在使用Mybatis的时候,数据库的连接一般都会使用第三方的数据源组件,如C3P0,DBCP和Druid 等,其实针对数据库的连接Mybatis也有自己实现能。

我们常见的数据源组件都实现了javax.sql.DataSource接口(Sum提供的数据源组件规范,即连接池规范),Mybatis也针对该接口提供了两个实现类UnpooledDataSource(不使用连接池)和PooledDataSource(使用连接池)。

2.1 UnpooledDataSource

UnpooledDataSource类的主要实现逻辑为:每次获取连接都是从数据库新创建一个连接进行返回,又因为,数据库连接的创建是一个耗时的操作,且数据库连接是非常珍贵的资源,如果每次获取连接都创建一个,则可能会造成系统的瓶颈,拖垮响应速度等。

2.2 PooledDataSource

PooledDataSource类的主要逻辑为:1. 获取连接:首先从连接池中进行获取,如果连接池中已经没有空闲的连接了,则会判断当前的活跃连接数是否已经达到允许的最大值了,如果没有,则还可以创建新的连接,之后把它放到活跃的集合中进行使用,如果当前活跃的已达到最大值,则阻塞。2.返还连接到连接池,在返还连接的时候,进行判断,如果空闲连接数已达到允许的最大值,则直接关闭真正的数据库连接,否则把该连接放入到空闲集合中以供下次使用。

本文参考:https://my.oschina.net/mengyu...

你可能感兴趣的:(mybatis,连接池)