美文网首页
SpringBoot-Druid-Dynamic(多数据源)

SpringBoot-Druid-Dynamic(多数据源)

作者: KenChen_939 | 来源:发表于2021-12-15 17:43 被阅读0次

    Druid:基于Apache2.0协议 阿里开源的数据库连接池
    Dynamic:基于springBoot的快速集成多数据源的启动器

    • Druid能做什么

    Druid不仅仅是一个数据库连接池
    1.监控数据库访问性能,内置提供了一个StatFilter插件,能详细统计SQL执行性能。
    2.数据库密码加密
    3.SQL执行日志,支持Common-Logging,Log4,JdkLog,可以按需切换
    4.扩展JDBC,如对JDBC层有变成要求,可以通过Druid提供的Filter机制方便的编写扩展插件。

    Druid监控配置

    • 修改application
    ##### 连接池配置 #######
    # 过滤器设置(第一个stat很重要,没有的话会监控不到SQL)
    spring.datasource.druid.filters=stat,wall,log4j2
    
    ##### WebStatFilter配置 #######
    #启用StatFilter
    spring.datasource.druid.web-stat-filter.enabled=true
    #添加过滤规则
    spring.datasource.druid.web-stat-filter.url-pattern=/*
    #排除一些不必要的url
    spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
    #开启session统计功能
    spring.datasource.druid.web-stat-filter.session-stat-enable=true
    #缺省sessionStatMaxCount是1000个
    spring.datasource.druid.web-stat-filter.session-stat-max-count=1000
    #spring.datasource.druid.web-stat-filter.principal-session-name=
    #spring.datasource.druid.web-stat-filter.principal-cookie-name=
    #spring.datasource.druid.web-stat-filter.profile-enable=
    
    ##### StatViewServlet配置 #######
    #启用内置的监控页面
    spring.datasource.druid.stat-view-servlet.enabled=true
    #内置监控页面的地址
    spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
    #关闭 Reset All 功能
    spring.datasource.druid.stat-view-servlet.reset-enable=false
    #设置登录用户名
    spring.datasource.druid.stat-view-servlet.login-username=admin
    #设置登录密码
    spring.datasource.druid.stat-view-servlet.login-password=123
    #白名单(如果allow没有配置或者为空,则允许所有访问)
    spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
    #黑名单(deny优先于allow,如果在deny列表中,就算在allow列表中,也会被拒绝)
    spring.datasource.druid.stat-view-servlet.deny=
    
    • 重启项目后访问改地址,输入用户名密码即可
    http://ip:port/druid/login.html
    
    • Dynamic能做什么

    它是一个基于SpringBoot的快速集成多数据源的启动器
    1.支持数据源分组,读写分离,一主多从等。
    2.数据库敏感信息加密(可自定义)
    3.支持无数据源启动及懒加载数据源(需要的时候再创建连接)
    4.提供并简化对Druid等的快速集成

    Dynamic如何切换数据源

    使用@DS注解。该注解可以使用在方法上或者类上。同时存在则采用就近原则。方法注解优先于类注解
    (使用在service实现类上即可,使用默认数据源则不需要使用注解)

    @Service
    @DS("slave_1")
    public class ShengshiStudentManagementServiceImpl extends SysServiceImpl<ShengshiStuManagementMapper, ShengshiStuManagement> implements ShengshiStuManagementService {
    
        @Override
        public ShengshiStuManagement getById(Serializable id) {
            return baseMapper.selectById(id);
        }
    
    }
    

    ------------------------------------实验------------------------------------

    1. Maven配置

                    <!--数据库连接池--> 
          <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${druid-version}</version>
            </dependency>
    
    <!--        多数据库连接-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
                <version>${dynamic-version}</version>
            </dependency>
    
    

    2.数据源配置

    spring:
      datasource:
        druid:
          initial-size: 10
          max-active: 100
          min-idle: 3
          max-wait: 5000
          pool-prepared-statements: true
          max-pool-prepared-statement-per-connection-size: 100
        dynamic:
          primary: master #设置默认的数据源或者数据源组,默认值即为master
          strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源
          datasource:
            master:
              url: jdbc:mysql://127.0.0.1:3306/edu_test
              username: root
              password: 123456
              driver-class-name: com.mysql.cj.jdbc.Driver   # 3.2.0开始支持SPI可省略此配置
            slave_1:
              url: jdbc:mysql://127.0.0.1:3306/shengshi
              username: root
              password: 123456
              driver-class-name: com.mysql.cj.jdbc.Driver
    #        slave_2:
    #          url: ENC(xxxxx) # 内置加密,使用请查看详细文档
    #          username: ENC(xxxxx)
    #          password: ENC(xxxxx)
    #          driver-class-name: com.mysql.jdbc.Driver
    #          schema: db/schema.sql # 配置则生效,自动初始化表结构
    #          data: db/data.sql # 配置则生效,自动初始化数据
    #          continue-on-error: true # 默认true,初始化失败是否继续
    #          separator: ";" # sql默认分号分隔符
    

    按照业务自己写好DAO层,secive、controller等就OK,在service实现类上使用@DS注解来切换数据源,默认数据源不需要使用注解。

    注意注意注意
    启动类上修改注解

    @SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
    

    示例代码Git地址

    参考文献
    Druid GitHub地址
    Dynamic GitHub地址

    相关文章

      网友评论

          本文标题:SpringBoot-Druid-Dynamic(多数据源)

          本文链接:https://www.haomeiwen.com/subject/btcpfrtx.html