MySQL连接池配置之dbcp

MySQL数据库在高访问量场景下如果每次操作数据库的时候都去临时创建连接,会造成系统性能急剧下降。此时初步的解决办法就是为数据库的操作配置合适的连接池。目前,业内成熟的数据库连接池有:dbcp,c3p0,durid,hikari。

1、数据库连接信息配置

jdbc.properties内容:

#连接驱动

mysql.jdbc.driver=com.mysql.jdbc.Driver

#数据库连接字符串

mysql.jdbc.url=jdbc:mysql://127.0.0.1:3306/test_db?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&connectTimeout=5000&socketTimeout=5000

#连接数据库所使用的用户名

mysql.jdbc.username=root

#连接密码

mysql.jdbc.password=root

#最大连接数,表示同时最大可以允许10个链接,该值需要根据数据库实际情况设置

mysql.jdbc.maxActive=10

#初始化连接数

mysql.jdbc.initialSize=5

#最大等待时间,表示连接池中的链接用完之后,新请求的等待时间,单位:毫秒

mysql.jdbc.maxWait=60000

#数据库连接的最大空闲连接,表示没有数据库操作时,连接池中仍然保持着这么多连接,而不被释放

mysql.jdbc.maxIdle=8

#最小空闲连接,表示连接池中最少需要保持这么多空闲连接

mysql.jdbc.minIdle=5

#表示是否自动回收超时连接

mysql.jdbc.removeAbandoned=true

#回收超时连接时的超时时间,单位:秒

mysql.jdbc.removeAbandonedTimeout=180

#表示多长时间运行一次空闲连接回收器,单位:毫秒

mysql.jdbc.timeBetweenEvictionRunsMillis=30000

#表示连接池中的空闲连接多长时间之后会被回收,单位:毫秒

mysql.jdbc.minEvictableIdleTimeMillis=180000

注意:

(1)连接字符串后面的几个参数什么含义?

useUnicode:是否使用unicode字符集,如果需要设置characterEncoding参数,则该参数必须为true,否则设置的参数不起作用

characterEncoding:指定链接数据库时所使用的字符集

autoReconnect:当数据库连接异常中断时,是否自动重新连接

failOverReadOnly:表示当数据库自动重连成功之后,链接是否设置为只读

connectTimeout:表示和服务器建立socket连接时的超时时间,0表示永不超时

socketTimeout:表示socket读写超时时间,0表示永不超时

(2)如果该配置是在xml文件中,url中的&符号需要进行转义,否则启动会报错

mysql.jdbc.url=jdbc:mysql://127.0.0.1:3306/test_db?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&connectTimeout=5000&socketTimeout=5000

2、数据库连接池配置

spring.xml中配置的数据源如下,其他配置略。

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="${mysql.jdbc.driver}"/>
  <property name="url" value="${mysql.jdbc.url}"/>
  <property name="username" value="${mysql.jdbc.username}"/>
  <property name="password" value="${mysql.jdbc.password}"/>
  <property name="maxActive" value="${mysql.jdbc.maxActive}"/>
  <property name="initialSize" value="${mysql.jdbc.initialSize}"/>
  <property name="maxWait" value="${mysql.jdbc.maxWait}"/>
  <property name="maxIdle" value="${mysql.jdbc.maxIdle}"/>
  <property name="minIdle" value="${mysql.jdbc.minIdle}"/>
  <property name="removeAbandoned" value="${mysql.jdbc.removeAbandoned}"/>
  <property name="removeAbandonedTimeout" value="${mysql.jdbc.removeAbandonedTimeout}"/>
  <property name="validationQuery" value="SELECT 1"/>
  <property name="testWhileIdle" value="true"/>
  <property name="testOnBorrow" value="false"/>
  <property name="numTestsPerEvictionRun" value="50"/>
  <property name="timeBetweenEvictionRunsMillis" value="${mysql.jdbc.timeBetweenEvictionRunsMillis}"/>
  <property name="minEvictableIdleTimeMillis" value="${mysql.jdbc.minEvictableIdleTimeMillis}"/>
</bean>

至此,基于dbcp的数据库连接池配置完毕。

注:文章属原创,如果转发,请务必标注出处:https://www.jinnianshizhunian.vip