• SpringBoot-25-整合持久层-通过Spring Boot starter 整合 Druid


    通过Spring Boot starter 整合 Druid
    • Druid 可以说是国内使用最广泛的数据源连接池产品,但到目前为止 Spring Boot 官方只对 Hikari、Tomcat、Dbcp2 和 OracleUcp 等 4 种数据源产品提供了自动配置支持,对于其他的数据源连接池产品(包括 Druid),则并没有提供自动配置支持。这就导致用户只能通过自定义的方式(第一种整合方式)整合 Druid,非常繁琐。

    • 阿里官方提供了 Druid Spring Boot Starter,它可以帮助我们在 Spring Boot 项目中,轻松地整合 Druid 的数据库连接池和监控功能。

    • 使用 Druid Spring Boot Starter 将 Druid 与 Spring Boot 整合,导入 Druid Spring Boot Starter 依赖

    
    
        com.alibaba
        druid-spring-boot-starter
        1.2.11
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 配置属性:Druid Spring Boot Starter 已经将 Druid 数据源中的所有模块都进行默认配置,我们也可以通过 Spring Boot 配置文件(application.properties/yml)来修改 Druid 各个模块的配置,否则将使用默认配置。
    • 在 Spring Boot 配置文件中配置以下内容:当配置内容较多时,我们通常推荐使用 application.yml(示例中使用的是application.yml)。

    JDBC 通用配置
    Druid 数据源连接池配置
    Druid 监控配置
    Druid 内置 Filter 配置

    • JDBC 通用配置:数据库用户名、数据库密码、数据库 URL 以及 数据库驱动等等
    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        username: root
        password: 123456
        url: jdbc:mysql://localhost:3306/jdbcstudy?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimeZone=UTC
        type: com.alibaba.druid.pool.DruidDataSource
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • Druid 数据源连接池配置
    spring:
      datasource:
        druid:
          initial-size: 5                                                                 #初始化连接大小
          min-idle: 5                                                                     #最小连接池数量
          max-active: 20                                                                  #最大连接池数量
          max-wait: 60000                                                                 #获取连接时最大等待时间,单位毫秒
          time-between-eviction-runs-millis: 60000                                        #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
          min-evictable-idle-time-millis: 300000                                          #配置一个连接在池中最小生存的时间,单位是毫秒
          validation-query: SELECT 1 FROM DUAL                                            #测试连接
          test-while-idle: true                                                           #申请连接的时候检测,建议配置为true,不影响性能,并且保证安全性
          test-on-borrow: false                                                           #获取连接时执行检测,建议关闭,影响性能
          test-on-return: false                                                           #归还连接时执行检测,建议关闭,影响性能
          pool-prepared-statements: false                                                 #是否开启PSCache,PSCache对支持游标的数据库性能提升巨大,oracle建议开启,mysql下建议关闭
          max-pool-prepared-statement-per-connection-size: 20                             #开启poolPreparedStatements后生效
          #则导入log4j 依赖就行
          #如果允许报错,java.lang.ClassNotFoundException: org.apache.Log4j.Priority
          filters: stat,wall,log4j2                                                              #配置扩展插件,常用的插件有=>stat:监控统计、log4j:日志记录、wall:防御sql注入
          connection-properties: 'druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000' #通过connectProperties属性来打开mergeSql功能;慢SQL记录
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • Druid 监控配置:我们还可以在 Spring Boot 的配置文件中对 Druid 内置监控页面、Web-JDBC 关联监控和 Spring 监控等功能进行配置
    spring:
      datasource:
        druid:
          # StatViewServlet配置,说明请参考Druid Wiki,配置_StatViewServlet配置
          stat-view-servlet:
            enabled: true                                                                 #是否开启内置监控页面,默认值为 false
            url-pattern: '/druid/*'                                                       #StatViewServlet 的映射路径,即内置监控页面的访问地址
            reset-enable: true                                                            #是否启用重置按钮
            login-username: admin                                                         #内置监控页面的登录页用户名 username
            login-password: admin                                                         #内置监控页面的登录页密码 password
          # WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter
          web-stat-filter:
            enabled: true                                                                 #是否开启内置监控中的 Web-jdbc 关联监控的数据
            url-pattern: '/*'                                                             #匹配路径
            exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'                     #排除路径
            session-stat-enable: true                                                     #是否监控session
          # Spring监控配置,说明请参考Druid Github Wiki,配置_Druid和Spring关联监控配置
          aop-patterns: com.example.service.*                                                #Spring监控AOP切入点,如x.y.z.abc.*,配置多个英文逗号分隔
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • Druid 内置 Filter 配置:Druid Spring Boot Starter 对以下 Druid 内置 Filter,都提供了默认配置:

    StatFilter
    WallFilter
    ConfigFilter
    EncodingConvertFilter
    Slf4jLogFilter
    Log4jFilter
    Log4j2Filter
    CommonsLogFilter

    • 我们可以通过 spring.datasource.druid.filters=stat,wall … 的方式来启用相应的内置 Filter,不过这些 Filter 使用的都是默认配置。如果默认配置不能满足我们的需求,我们还可以在配置文件使用 spring.datasource.druid.filter.* 对这些 Filter 进行配置。
    spring:
      datasource:
        druid:
         # 对配置已开启的 filters 即 stat(sql 监控)  wall(防火墙)
          filter:
            #配置StatFilter (SQL监控配置)
            stat:
              enabled: true                                                               #开启 SQL 监控
              slow-sql-millis: 1000                                                       #慢查询
              log-slow-sql: true                                                          #记录慢查询 SQL
            #配置WallFilter (防火墙配置)
            wall:
              enabled: true                                                               #开启防火墙
              config:
                update-allow: true                                                        #允许更新操作
                drop-table-allow: false                                                   #禁止删表操作
                insert-allow:  true                                                       #允许插入操作
                delete-allow: true                                                        #删除数据操作
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 在配置 Druid 内置 Filter 时,需要先将对应 Filter 的 enabled 设置为 true,否则内置 Filter 的配置不会生效。
    • Druid Spring Boot Starter 并不是只支持以上属性,它支持 DruidDataSource 内所有具有 setter 方法的属性
    • 完整的application.yml,通过Spring Boot starter 整合 Druid配置。
    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        username: root
        password: 123456
        url: jdbc:mysql://localhost:3306/jdbcstudy?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimeZone=UTC
        type: com.alibaba.druid.pool.DruidDataSource
        druid:
          initial-size: 5                                                                 #初始化连接大小
          min-idle: 5                                                                     #最小连接池数量
          max-active: 20                                                                  #最大连接池数量
          max-wait: 60000                                                                 #获取连接时最大等待时间,单位毫秒
          time-between-eviction-runs-millis: 60000                                        #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
          min-evictable-idle-time-millis: 300000                                          #配置一个连接在池中最小生存的时间,单位是毫秒
          validation-query: SELECT 1 FROM DUAL                                            #测试连接
          test-while-idle: true                                                           #申请连接的时候检测,建议配置为true,不影响性能,并且保证安全性
          test-on-borrow: false                                                           #获取连接时执行检测,建议关闭,影响性能
          test-on-return: false                                                           #归还连接时执行检测,建议关闭,影响性能
          pool-prepared-statements: false                                                 #是否开启PSCache,PSCache对支持游标的数据库性能提升巨大,oracle建议开启,mysql下建议关闭
          max-pool-prepared-statement-per-connection-size: 20                             #开启poolPreparedStatements后生效
          #则导入log4j 依赖就行
          #如果允许报错,java.lang.ClassNotFoundException: org.apache.Log4j.Priority
          filters: stat,wall,log4j2                                                        #配置扩展插件,常用的插件有=>stat:监控统计  监控统计、log4j:日志记录、wall:防御sql注入
          connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000  #通过connectProperties属性来打开mergeSql功能;慢SQL记录
    
          # StatViewServlet配置,说明请参考Druid Wiki,配置_StatViewServlet配置
          stat-view-servlet:
            enabled: true                                                                 #是否开启内置监控页面,默认值为 false
            url-pattern: '/druid/*'                                                       #StatViewServlet 的映射路径,即内置监控页面的访问地址
            reset-enable: true                                                            #是否启用重置按钮
            login-username: admin                                                         #内置监控页面的登录页用户名 username
            login-password: 123456                                                         #内置监控页面的登录页密码 password
          # WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter
          web-stat-filter:
            enabled: true                                                                 #是否开启内置监控中的 Web-jdbc 关联监控的数据
            url-pattern: '/*'                                                             #匹配路径
            exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'                     #排除路径
            session-stat-enable: true                                                     #是否监控session
          # Spring监控配置,说明请参考Druid Github Wiki,配置_Druid和Spring关联监控配置
          aop-patterns: com.example.controller.*                                               #Spring监控AOP切入点,如x.y.z.abc.*,配置多个英文逗号分隔
          # 对配置已开启的 filters 即 stat(sql 监控)  wall(防火墙)
          filter:
            #配置StatFilter (SQL监控配置)
            stat:
              enabled: true                                                               #开启 SQL 监控
              slow-sql-millis: 1000                                                       #慢查询
              log-slow-sql: true                                                          #记录慢查询 SQL
            #配置WallFilter (防火墙配置)
            wall:
              enabled: true                                                               #开启防火墙
              config:
                update-allow: true                                                        #允许更新操作
                drop-table-allow: false                                                   #禁止删表操作
                insert-allow:  true                                                       #允许插入操作
                delete-allow: true                                                        #删除数据操作
    #整合mybatis
    mybatis:
      #扫描实体类的位置,在此处指明扫描实体类的包,在 mapper.xml 中就可以不写实体类的全路径名
      type-aliases-package: com.example.pojo
      # 指定 mapper.xml 的位置
      mapper-locations: classpath:mybatis/mapper/*.xml
      configuration:
        #默认开启驼峰命名法,可以不用设置该属性
        map-underscore-to-camel-case: true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 测试,访问http://localhost:8080/druid/login.html进行登陆Druid监控平台,进入主页。

    在这里插入图片描述

    在这里插入图片描述

    • 这两种整合 Druid 数据源的方式的优缺点:
    • 根据官方文档,自定义整合 Druid 数据源能够更加清晰地了解 Druid 的各种功能及其实现方式,但整合过程繁琐。
    • 通过 Druid Spring Boot Starter 整合 Druid 数据源,则更加方便快捷,大大简化了整合过程,但无法清晰地了解 Druid 的功能内部的实现方式和原理。
    • 实际项目开发中使用Druid Spring Boot Starter 进行整合,毕竟这种整合方式大大简化了整个整合的过程
    下一篇:SpringBoot-26-整合持久层-整合Mybatis框架
  • 相关阅读:
    SpringBoot整合Shiro、Mybatis、Thymeleaf
    Android_三MSM8953_android10_移植nmap
    【无标题】
    假ArrayList导致的线上事故......
    Java多种方法实现等待所有子线程完成再继续执行
    齐岳:FITC/Rhodamine/Cy7荧光标记半乳糖Galactose/松醇D-Pinitol/甘露糖Mannos
    conan2 基础入门(04)-指定编译器(gcc为例)
    java毕业设计后勤管理系统餐饮评价监督系统(附源码、数据库)
    前端面试题日常练-day40 【面试题】
    动捕设备如何推动线下活动以虚拟主持人创新升级互动形式
  • 原文地址:https://blog.csdn.net/weixin_42045639/article/details/126482492