SpringBoot2,Druid数据源常用配置

发布时间 2023-10-17 19:09:54作者: 我不是萌新
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>