数据库连接池

为什么:

    数据库连接是一种关键、有限且昂贵的资源,创建和释放数据库连接是一个很耗时的操作,频繁地进行这样的操作将占用大量的性能开销,进而导致网站的响应速度下降,严重的时候可能导致服务器崩溃;数据库连接池可以节省系统许多开销。

是什么:

    数据库连接池(Database Connection Pooling)在程序初始化时创建一定数量的数据库连接对象并将其保存在一块内存区中,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接以避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

    数据库连接池不仅负责创建数据库连接,还负责分配、管理和释放数据库连接,可以通过配置连接池的参数来控制连接池中的初始连接数、最小连接、最大连接、最大空闲时间等。

最小连接数:

    是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费。

最大连接数:

    限定了连接池能存储的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会造成应用程序因不能立刻获得数据库连接而对程序产生功能性影响。

最小连接数与最大连接数差距:

    最小连接数与最大连接数相差太大,最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放

原理:

    程序初始化时创建一定数据量的数据库连接对象存储在内存中,当程序需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象;如果连接池内没有空闲连接,连接池创建新的数据库连接对象并将这个连接对象提供给应用程序使用,应用程序用完后,数据库连接池不会立刻关闭该连接,在空闲时间超过最大空闲时间时,该连接才被关闭;当程序需要再次访问数据库时,数据库连接池会将空闲时间最长的那个连接提供给应用程序; 如果数据库连接请求超过最大连接数,则该数据库连接请求被加入到等待队列中;程序退出时,数据库连接池断开所有连接并释放资源。

原理解读:

    其实简单来说,就是程序初始化会创建一定数量的连接对象,当需要时,会取出空闲的使用;如果初始化创建的都使用完了,在需要的时候,会创建新的连接对象;还有几点需要注意:①使用完后,不会关闭该连接,会返回连接池等待使用,如果空闲时间超过了最大空闲时间,才会关闭该连接。②当再次访问数据库时,会先取出等待时间,也就是空闲时间最长的来使用。③如果连接达到了最大连接数,当再有连接请求时,会进行等待。④程序退出时,数据库连接池断开,释放其中所有连接资源。

常用连接池:

    1、DBCP:http://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi

    2、C3P0:https://sourceforge.net/projects/c3p0/

    3、Druid:https://github.com/alibaba/druid

    4、HikariCP:http://brettwooldridge.github.io/HikariCP/

Spring配置连接池:(通过下面代码讲解,来进行知识点的讲解)

         

    1、在这里使用了destroy-method="close",是为了在关闭Spring容器之后,进行销毁。

    2、driverClassName,jdbcUrl,username,password,这四个属性都有,才可以连接数据库。

    3、在下面注释中,后五个property标签,是数据库连接池的配置,分别代表着:

        ①、等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省值:30秒

        ②、连接池中允许的最大连接数,超过最大连接数时需要进行等待,缺省值:10个

        ③、一个连接的生命时长(毫秒)(从产生到销毁),超时而且没被使用就会被释放(retired),缺省值:3分钟

        ④、连接只读数据库时配置为true, 保证安全,

        ⑤、一个连接idle状态(即空闲)的最大时长(毫秒),超时则被释放(retired),缺省值:10分钟

    4、注释中前四个property,是为了在Spring的xml使用properties.xml中的配置信息。这样使用是有原因的,当Spring的xml文件配置信息过多的时候,在里面修改信息比较耗费时间,而在properties文件里面修改就容易的多,这样能够节省时间。

        格式就是:${}     其中{}里面是 properties文件里面的属性名。

    5、如果想使用properties文件中的信息,需要在Spring的xml文件中,配置PropertyPlaceholderConfigurer并为其location变量指定properties文件路径,然后即可使用${}的形式将properties文件中的配置信息读取出来,下面给出代码(图片中是比较精简的写法,value的值会由于properties文件所在的路径不同,而改变):

      <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

            <property name="location" value="classpath:config/jdbc.properties"></property>

      </bean>

    6、在properties文件中,属性的名字,最好不要单独用username或password,因为有时候会导致连接不成功;为了保险起见最好在前面加上jdbc. 或者db.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值