简单介绍一下数据库连接池,或者说使用连接池的背景是什么?数据库连接是一种关键的、有限的、昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。
而连接池能干什么呢?连接池能够像一个蓄水池一样容纳一些固定数量的数据库连接,当用户的请求需要访问数据库的时候,不是直接建立新的连接,而是通过连接池获得已经创建好的连接,这样可以大大提高系统的服务性能,因为一旦并发过多的时候,如果没有连接池,每一个并发就会建立一个连接,而连接需要耗费内存资源,最终产生内存溢出,导致服务奔溃,虽然用了连接池并不能消除内存溢出的情况,但是能大大减轻这种情况的发生,这时候就需要提高硬件的质量了。
银行办理业务这个生活现象也与连接池的思想不谋而合,办理完了一个用户的业务,如果没有连接池,可能业务员会关掉电脑(关闭连接),再来一个用户,在开启电脑(建立连接),实际情况是业务员不会轻易关掉电脑,而是根据用户多少来增减窗口数量,连接池也是这样,一旦某个连接超过设定的最大空闲时间,就会被系统回收,从连接池里面取出,节省资源。
今天做了一个实验:本来想比较有无连接池插入200条记录的运行时间的,但是200条记录对于没有连接池的程序来说,就是200个并发,结果显示拒绝建立连接,或许这就是导致系统奔溃、停止服务的原因之一了。
贴上实验的截图,
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: “Too many connections”
使用了数据库,200条记录还是很快的,分享实验的源码:
https://github.com/zhoutaiyu/JavaEE/tree/master/JDBCTest2