目录
  • @DS解决动态数据源问题
    • 引入maven
    • 修改Application.yml
  • @DS注解说明

    @DS解决动态数据源问题

    动态切换数据源,无非是继承org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource这个类,重写determineCurrentLookupKey()这个方法,动态变换数据源的key值,有人已经将详细代码封装到框架中,我们只需要使用它的注解@DS就好。

    引入maven

    <!-- https://mvnrepository.com/artifact/com.baomidou/dynamic-datasource-spring-boot-starter -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
                <version>3.2.1</version>
            </dependency>

    修改Application.yml

    参考的是官网的例子

    spring:
      datasource:
        dynamic:
          primary: master #设置默认的数据源或者数据源组,默认值即为master
          strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源.
          datasource:
            master:
              url: jdbc:mysql://xx.xx.xx.xx:3306/dynamic
              username: root
              password: 123456
              driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
            slave_1:
              url: jdbc:mysql://xx.xx.xx.xx:3307/dynamic
              username: root
              password: 123456
              driver-class-name: com.mysql.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默认分号分隔符
              
           #......省略
           #以上会配置一个默认库master,一个组slave下有两个子库slave_1,slave_2

    这是我自己的:

    spring:
      datasource:
        dynamic:
          primary: master #设置默认的数据源或者数据源组,默认值即为master #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源.
          datasource:
            master:
              url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=balabala
              username: sa
              password: 123456Sa
              driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
            sub:
              url: jdbc:mysql://127.0.0.1:3307/balabala?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
              username: sa
              password: 123456Sa
              driver-class-name: com.mysql.cj.jdbc.Driver

    在需要使用非默认数据库的dao层的方法上加上注解@DS(“数据库名”)即可

    @DS("sub")
    int selectBusiness(@Param("startTime") String startTime,
                       @Param("endTime") String endTime,
                       @Param("businessType") String businessType);

    @DS注解说明

    写法:

    @DS(value = "数据源名称")
    datasource: 
    数据源名臣

    注解在类上或方法上来切换数据源

    Gradle:

    com.baomidou:dynamic-datasource-spring-boot-starter:2.5.3

    打开一个线程得方法

    new Thread(() -> {
        方法内容-------------------------------------
    }).start();

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。