Skip to content

整合Druid

Druid 是一个分布式的、支持实时多维 OLAP 分析的数据处理系统。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource

在pom.xml引入依赖

xml
        <!--整合Druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.16</version>
        </dependency>

在application.yaml设置为Druid连接池

yaml
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource # 使用阿里的数据库连接池
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC
    username: root
    password: yuxingxuan

进行最简单的配置之后就可以直接使用了,Spring Boot默认使用的是HikariDataSource

application.yaml参考配置信息

yaml
# 数据源配置
spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.mysql.cj.jdbc.Driver
        druid:
            # 主库数据源
            master:
                url: jdbc:mysql://124.221.121.134:3306/zybtrainsystem?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                username: ZybTrainSystem
                password: zcieiB7r2s3BT5NP
            # 从库数据源
            slave:
                # 从数据源开关/默认关闭
                enabled: false
                url:
                username:
                password:
            # 初始连接数
            initialSize: 5
            # 最小连接池数量
            minIdle: 10
            # 最大连接池数量
            maxActive: 20
            # 配置获取连接等待超时的时间
            maxWait: 60000
            # 配置连接超时时间
            connectTimeout: 30000
            # 配置网络超时时间
            socketTimeout: 60000
            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
            timeBetweenEvictionRunsMillis: 60000
            # 配置一个连接在池中最小生存的时间,单位是毫秒
            minEvictableIdleTimeMillis: 300000
            # 配置一个连接在池中最大生存的时间,单位是毫秒
            maxEvictableIdleTimeMillis: 900000
            # 配置检测连接是否有效
            validationQuery: SELECT 1 FROM DUAL
            testWhileIdle: true
            testOnBorrow: false
            testOnReturn: false
            webStatFilter:
                enabled: true
            statViewServlet:
                enabled: true
                # 设置白名单,不填则允许所有访问
                allow:
                url-pattern: /druid/*
                # 控制台管理用户名和密码
                login-username: ruoyi
                login-password: 123456
            filter:
                stat:
                    enabled: true
                    # 慢SQL记录
                    log-slow-sql: true
                    slow-sql-millis: 1000
                    merge-sql: true
                wall:
                    config:
                        multi-statement-allow: true

数据库连接心跳包:

yaml
      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      timeBetweenEvictionRunsMillis: 30000
      # 配置一个连接在池中最小生存的时间,单位是毫秒
      minEvictableIdleTimeMillis: 300000
      # 配置一个连接在池中最大生存的时间,单位是毫秒
      maxEvictableIdleTimeMillis: 900000
      # 配置检测连接是否有效
      validationQuery: SELECT 1 FROM DUAL
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
  • timeBetweenEvictionRunsMillis:设置了执行空闲连接验证和废弃连接回收任务的间隔时间。在这里,配置的是每30秒(30000毫秒)执行一次这样的任务
  • minEvictableIdleTimeMillis:定义了一个连接在连接池中可以保持空闲状态的最短时间。配置为300000毫秒(5分钟),意味着一个连接如果空闲超过5分钟,它就可以被回收
  • maxEvictableIdleTimeMillis:定义了一个连接在连接池中可以保持空闲状态的最长时间。配置为900000毫秒(15分钟),意味着一个连接如果空闲超过15分钟,它将被强制回收
  • validationQuery:定义了一个简单的SQL查询(SELECT 1 FROM DUAL),用于验证连接的有效性
  • testWhileIdle:性设置为true,表示在连接空闲时执行验证查询
  • testOnBorrow:属性设置为false,表示在从连接池中借用连接之前不执行验证查询
  • testOnReturn:属性设置为false,表示在将连接返回到连接池之前不执行验证查询