spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis?serverTimeZone=UTC
username: root
password: root
max-wait: 2000 # 获取连接的最大等待时间
initial-size: 5 # 初始化时连接池的数量
max-active: 20 # 最大连接池数量
min-idle: 3 # 最小连接池数量
validation-query: select 1 # 用来检测连接是否有效的sql,如果此配置为空,那么下面三条均不会生效
test-on-borrow: false # 申请连接时检测
test-on-return: false # 归还连接时检测
# 原文链接:https://blog.csdn.net/aaronmer/article/details/120199069
test-while-idle: true # 设置申请连接的时候有空闲连接时进行检测,test-on-borrow为false时才生效,
time-between-eviction-runs-millis: 60000 # 指定空闲间隔时间,仅检测有效性,并不会关闭链接
# 原文链接:https://www.jianshu.com/p/be9dbe640daf
# minEvictableIdleTimeMillis(默认30分钟) 连接空闲时间大于该值并且池中空闲连接大于minIdle则关闭该连接
# maxEvictableIdleTimeMillis(默认7小时) 连接空闲时间大于该值,不管minIdle都关闭该连接
connection-error-retry-attempts: 1 # 创建链接错误的重试次数
break-after-acquire-failure: true # true表示向数据库请求连接失败后,就算后端数据库恢复正常也不进行重连,客户端对pool的请求都拒绝掉,false表示新的请求都会尝试去数据库请求connection,默认为false
<!--DruidDataSource使用必须要注意,CreateConnectionThread线程是死循环,必须设置-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!--用来检测连接是否有效-->
<property name="validationQuery" value="select 1"/>
<!--借用连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能-->
<property name="testOnBorrow" value="false"/>
<!--归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能-->
<property name="testOnReturn" value="false"/>
<!--连接空闲时检测,如果连接空闲时间大于timeBetweenEvictionRunsMillis指定的毫秒,执行validationQuery指定的SQL来检测连接是否有效-->
<property name="testWhileIdle" value="true"/>
<!--指定一分钟为空闲-->
<property name="timeBetweenEvictionRunsMillis" value="60000"/>
<!--创建连接失败重试次数-->
<property name="connectionErrorRetryAttempts" value="1"/>
<!--失败次数到达connectionErrorRetryAttempts值后,睡眠timeBetweenConnectErrorMillis时间,然后继续进行创建连接-->
<property name="timeBetweenConnectErrorMillis" value="60000"/>
<!--在进行睡眠之前,先查看该配置项是否为true,如果是,则退出死循环,此处会导致后续再也不进行创建连接(因为此处线程开启,仅在 createAndStartCreatorThread()方法中, 而该方法在 init() 方法中,在进行初始化时,有一个 inited 标志值,第一次进行初始化后,就将该值置为 true, 后续不再改为false,除非调用 restart()方法)-->
<!--true表示向数据库请求连接失败后,就算后端数据库恢复正常也不进行重连,客户端对pool的请求都拒绝掉,false表示新的请求都会尝试去数据库请求connection,默认为false-->
<property name="breakAfterAcquireFailure" value="false"/>
<!--不解释了,如果有一天我看不懂这俩,希望那时候的我转行-->
<property name="maxActive" value="20"/>
<property name="initialSize" value="5"/>
</bean>