数据库连接池

来源:互联网 发布:网络编程书籍 编辑:程序博客网 时间:2024/06/15 17:18
    1. 为什么会出现连接池?

    在java中,对数据库的操作,都是基于jdbc的,jdbc每执行一次数据库操作,都需要先获取数据库连接,完成对数据库的操作之后,再关闭coonnection。

     

    由于频繁的打开和关闭连接对jvm包括数据库都有一定的资源负荷,尤其应用压力较大时资源占用比较多容易产生性能问题。于是就有了连接池

    1. 什么是连接池?

     

     

    先打开一定数量的数据库连接,当使用的时候分配给调用者,调用完毕后返回给连接池,注意返回给连接池后这些连接并不会关闭,而是

    准备给下一个调用者进行分配。由此可以看出连接池节省了大量的数据库连接打开和关闭的动作,对系统性能提升的益处不言而喻。下面我们通过连接池几个属性的意义,来看连接池是如何提高系统性能的。

    1. 如何使用连接池

    连接池现在有了很多产品,在这里我们以阿里的连接池为例说明

     

    对几个属性进行说明:

    maxIdle:连接池中最大的空闲的连接数,超过的空闲连接将被释放,如果设置为负数表示不限制;表示即使连接池中所有的数据库连接都处于空闲状态,也可以保持maxIdle数量的空闲连接

    minIdle:连接池中最小的空闲的连接数,低于这个数量会被创建新的连接。

     

     

    removeAbandonedTimeout  :超过时间限制,回收没有用(废弃)的连接(默认为 300秒,调整为180

    removeAbandoned  :超过removeAbandonedTimeout时间后,是否进行没用连接(废弃)的回收(默认为false,调整为true)

     

    以设定maxIdle为20minIdle为10,removeAbandonedTimeout为30为例,

    应用一旦启动则首先打开10个数据库连接,但注意此时正在使用的数据库连接为0,空闲的数据库连接数量为10。

    你开始登录,假设登录代码使用了一个连接进行查询,那么此时正在使用的数据库连接池的数字为1、空闲数为9,不需要从数据库打开新的数据库连接。

    当你登录结束后,正在使用的数据库的连接数量为0,空闲的数据库连接的数量为10。

     

    当有11个人同时登录这个系统的时候,空闲的数据库连接不够,连接池从数据库新申请(打开)了一个连接,连同另外的10个一并送出,这个瞬间连接池的使用数是11个

    11个人登录结束后,正在使用的数据库连接为0,连接池中空闲的连接数目在一定的时间内为11,因为minIdle<11<maxIdle。

     

    当有21个人同时登录呢?那第21个人就只能等前面的某个人登录完毕后释放连接给他。

    这时连接池开启了20个数据库连接,当在一定的时间内,没有任何人访问这个系统的时候,连接池中会一直有20个空闲连接吗?

    当然不,连接池会在removeAbandonedTimeout设定的时间后关闭(maxIdle -minIdle)的连接还给数据库,在这个例子里数字是20-10=10,因为只需要保持最小空闲连接数就好。

     

    maxWait :最大等待时间,当没有空闲连接时,应用等待连接池内被占用的数据库连接被释放的最大时间,超过该时间限制会抛出异常,如果设置-1表示无限等待(默认为无限,调整为60000ms,避免因线程池不够用,而导致请求被无限制挂起)

    maxActive表示并发情况下最大可从连接池中获取的连接数。如果数据库不是单独,供一个应用使用,通过设置maxActive参数可以避免某个应用无限制的获取连接对其 他应用造成影响,如果一个数据库只是用来支持一个应用那么maxActive理论上可以设置成该数据库可以支撑的最大连接数。


0 0
原创粉丝点击