我们知道,数据库连接池可以把数据库的连接缓存起来,下次使用的话可以直接取到缓存起来的数据库连接。那么,在这个过程中有几个细节需要注意:
1、数据库的连接数有没有限制?
2、数据库会不会自动断开已经建立的连接?
3、如果数据库重启了,但应用没有重启,那么数据库连接池中的所有连接都不可用了,怎么解决?
假如数据库连接池需要建立的连接数比数据库能够支持的最大连接数要大,那么肯定会导致连接创建不了,如果数据库连接池中的连接长时间得不到使用,那么数据库会不会自动断开这个连接以节省资源?这是在处理数据库连接池和数据库配置时必须要考虑的问题。
对于第一个问题,请参见博客:怎么实时查看mysql当前连接数
对于第二个问题,请参见博客:MySQL中interactive_timeout和wait_timeout的区别
参考以下数据库连接池的配置,其中有对连接的有效性进行验证的配置属性:
<beans:bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<!-- <beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> -->
<beans:property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<beans:property name="url" value="${mysql.url}" />
<beans:property name="username" value="${mysql.username}" />
<beans:property name="password" value="${mysql.password}" />
<!--maxActive: 最大连接数量-->
<beans:property name="maxActive" value="150"/>
<!--minIdle: 最小空闲连接-->
<beans:property name="minIdle" value="4"/>
<!--maxIdle: 最大空闲连接-->
<beans:property name="maxIdle" value="20"/>
<!--initialSize: 初始化连接-->
<beans:property name="initialSize" value="2"/>
<beans:property name="validationQuery" value="SELECT 1"/>
<beans:property name="testWhileIdle" value="true"/>
<!-- 切记配为false,配为true对性能有严重影响 -->
<beans:property name="testOnBorrow" value="false"/>
<!-- 连接被泄露时是否打印 -->
<beans:property name="logAbandoned" value="true"/>
<!--removeAbandoned: 是否自动回收超时连接-->
<beans:property name="removeAbandoned" value="true"/>
<!--removeAbandonedTimeout: 超时时间(以秒数为单位)-->
<beans:property name="removeAbandonedTimeout" value="1200"/>
<!--maxWait: 超时等待时间以毫秒为单位 1000*10-->
<beans:property name="maxWait" value="10000"/>
<!-- 在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位,60秒 1000*60 -->
<beans:property name="timeBetweenEvictionRunsMillis" value="600000"/>
<!-- 在每次空闲连接回收器线程(如果有)运行时检查的连接数量,最好跟maxActive一致 -->
<beans:property name="numTestsPerEvictionRun" value="40"/>
<!-- 1000 * 60 * 30 连接在池中保持空闲而不被空闲连接回收器线程-->
<beans:property name="minEvictableIdleTimeMillis" value="1800000"/>
<!--add by 20180818 bgein -->
<!-- 配置监控统计拦截的filters -->
<beans:property name="filters" value="wall,stat"/>
<beans:property name="proxyFilters">
<beans:list>
<beans:ref bean="stat-filter"></beans:ref>
<beans:ref bean="log-filter"></beans:ref>
</beans:list>
</beans:property>
<!--add by 20180818 end -->
</beans:bean>
具体的druid数据源配置详解参见博客:阿里巴巴数据库连接池 druid配置详解
关于资源池的介绍详见博客:资源池(从内存池到连接池)
本文探讨了数据库连接池在实际应用中的关键配置参数,包括最大连接数、空闲连接管理及连接有效性验证等,旨在提升数据库应用的性能与稳定性。
224

被折叠的 条评论
为什么被折叠?



