连接池的概念:
连接池:是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用
性质:创建和管理一个连接的缓冲池的技术
连接池:相当于一个很大的池,里面创建好的一定的连接,如20个,在你需要这些连接的时候,可以直接拿去用,前提是20个连接 没满有空的情况下,就会给该客户创建连接,如果连接满了,需要等待其他客户端断开连接,才可以连接,连接池会设置一定的等待时间,若是超时。。
连接池个人理解:就相当于一个工具箱,里面有很多工具,你需要这个工具的时候你就拿出来,不用的时候就放回去(个人理解),这样就不会浪
使用连接池原因,因为一个连接是需要占用软件硬件资源的,不关闭,很容易崩溃,所以使用连接池
连接池的作用:就是为了提高性能。
连接池的作用:连接池是将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对数据库进行访问。这样省略了创建连接和销毁连接的过程。这样性能上得到了提高
连接池可以极大的改善用户的 Java 应用程序的性能,同时减少全部资源的使用
连接池的优点级好处:
减少连接创建时间,减少一定的空间,避免不惜要的开销
当使用连接池时,每一个单独的线程能够像创建了一个自己的 JDBC 连接一样操作
受控的资源使用
如果用户不使用连接池,而是每当线程需要时创建一个新的连接,那么用户的应用程序的资源使用会产生非常大的浪费并且可能会导致高负载下的异常发生
连接池的操作步骤:
1.建立数据库连接池对象(服务器启动)。
2用已经写好指定的参数创建初始数量的数据库连接(也就是空的连接)。
3每一个数据库访问请求,直接从连接池中得到一个连接。如果连接池对象中没有空的连接,且连接数没有用满(就是最大的连接数量)就会创建一个连接。
4.存取数据库。
5.关闭数据库,释放所有数据库连接(此时的关闭数据库连接,并不是真正关闭,而是将他们放入空闲队列中,如实际空闲连接数大于初始空闲连接数则释放连接)。
6.释放数据库连接池对象(服务器停止、维护期间,释放数据库连接池对象,并释放所有连接)。
我们使用连接池,需要配置一些参数
连接池配置参数:
1.连接池最小连接数量
2.连接池最大连接数量
3.连接池最大空闲
4.连接池最小空闲
5. 获取连接最大等待时间
6. 检测需要关闭的空闲连接
7连接在池中最小生存的时间
8. 获取连接超时时间
9. 超时重试连接次数
<!-- 初始化连接大小 -->
<property name="initialSize" value="0" />
<!-- 连接池最大使用连接数量 -->
<property name="maxActive" value="20" />
<!-- 连接池最大空闲 -->
<property name="maxIdle" value="20" />
<!-- 连接池最小空闲 -->
<property name="minIdle" value="0" />
<!-- 获取连接最大等待时间 -->
<property name="maxWait" value="60000" />
<property name="validationQuery" value="${validationQuery}" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="testWhileIdle" value="true" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="25200000" />
<!-- 打开removeAbandoned功能 -->
<property name="removeAbandoned" value="true" />
<!-- 1800秒,也就是30分钟 -->
<property name="removeAbandonedTimeout" value="1800" />
<!-- 关闭abanded连接时输出错误日志 -->
<property name="logAbandoned" value="true" />
<!-- 监控数据库 -->
<!-- <property name="filters" value="stat" /> -->
<property name="filters" value="mergeStat" />