当前位置:   article > 正文

springboot整合多数据源的配置以及切换_mapper switch datasource

mapper switch datasource

springboot整合多数据源的配置以及切换

1.0 引入POM依赖

 <!-- lombok插件 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- mysql驱动依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
                <version>8.0.15</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>
        <!--阿里的druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.14</version>
        </dependency>
        <!--  mybatis-plus依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>
        <!--dynamic-datasource多数据源配置-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>2.5.4</version>
        </dependency>
  • 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

2.0 配置yml文件

spring:
autoconfigure:
#排除原生的druid的影响。
  exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
datasource:
##使用druid数据源
#type: com.alibaba.druid.pool.DruidDataSource
  dynamic:
    #设置默认的数据源,默认值为master
    primary: master
    datasource:
      slave:  #mysql数据源
        url: jdbc:mysql://localhost:3306/ebuy?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=false
        username: 账号
        password: 密码
        driver-class-name: com.mysql.cj.jdbc.Driver
        druid:
          #初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
          initial-size: 10
          #最大连接池数量
          max-active: 100
          #最小连接池数量
          min-idle: 10
          # 配置获取连接等待超时的时间
          max-wait: 6000
          #关闭Druid的防火墙wall
          filters: config,stat
          testOnBorrow: false
          testWhileIdle: true
          timeBetweenEvictionRunsMillis: 60000
      master: #mysql云数据源
        url: jdbc:mysql://云数据库外网ip地址:3306/test?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=false
        username: 账号
        password: 密码
        driver-class-name: com.mysql.cj.jdbc.Driver
        druid:
          #初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
          initial-size: 10
          #最大连接池数量
          max-active: 100
          #最小连接池数量
          min-idle: 10
          # 配置获取连接等待超时的时间
          max-wait: 6000
          #执行多行sql
          multiStatementAllow: true
            #关闭Druid的防火墙wall
          filters: config,stat
          testOnBorrow: false
          testWhileIdle: true
          timeBetweenEvictionRunsMillis: 60000
  • 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

3.0 实例

项目结构
在这里插入图片描述

3.1 数据库表结构

3.1.1 主数据库(master)

数据库表:
在这里插入图片描述

3.1.2 从数据库(slave)

数据库表:
在这里插入图片描述

3.2 pojo

3.2.1 master的实体类Teacher

package org.mycompony.datasourceswitch.pojo.master;

import lombok.Data;

/**
 * @version V1.0
 * @ClassName:Teacher
 * @Description:TODO
 * @author: wuhaibo
 * @date:2020/8/15 10:20
 */
@Data
public class Teacher {
    private Integer id;
    private String name;
    private Integer age;
    private String sex;
    private Double money;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

3.2.2 slave实体类

package org.mycompony.datasourceswitch.pojo.slave;

import lombok.Data;

/**
 * @version V1.0
 * @ClassName:Teacher
 * @Description:TODO
 * @author: wuhaibo
 * @date:2020/8/15 10:20
 */
@Data
public class Student {
    private Integer id;
    private String name;
    private Integer age;
    private String sex;
    private Double money;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

3.3 mapper

3.3.1 TeacherMapper

package org.mycompony.datasourceswitch.mapper.master;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Mapper;
import org.mycompony.datasourceswitch.pojo.master.Teacher;

/**
* @version V1.0
* @ClassName:TeacherMapper
* @Description:TODO
* @author: wuhaibo
* @date:2020/8/15 10:31
*/
@Mapper
@DS("master")
public interface TeacherMapper extends BaseMapper<Teacher> {
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

3.3.2 StudentMapper

package org.mycompony.datasourceswitch.mapper.slave;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.mycompony.datasourceswitch.pojo.slave.Student;

/**
 * @version V1.0
 * @ClassName:StudentMapper
 * @Description:TODO
 * @author: wuhaibo
 * @date:2020/8/15 10:31
 */
@Mapper
@DS("slave")
public interface StudentMapper extends BaseMapper<Student> {
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

3.4 TestController

package org.mycompony.datasourceswitch.controller;

import com.baomidou.dynamic.datasource.annotation.DS;
import lombok.extern.slf4j.Slf4j;
import org.mycompony.datasourceswitch.mapper.master.TeacherMapper;
import org.mycompony.datasourceswitch.mapper.slave.StudentMapper;
import org.mycompony.datasourceswitch.pojo.master.Teacher;
import org.mycompony.datasourceswitch.pojo.slave.Student;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;


/**
 * @version V1.0
 * @ClassName:TeacherController
 * @Description:TODO
 * @author: wuhaibo
 * @date:2020/8/15 10:34
 */
@RestController
@Slf4j
@RequestMapping("/api")
public class TeacherController {
    @Resource
    private TeacherMapper teacherMapper;
    @Resource
    private StudentMapper studentMapper;
    @RequestMapping("/getTeacherById")
    public Teacher  getTeacherById(){
        log.info("当前的默认数据源是单数据源,数据源名为 {}", "master");
        return  teacherMapper.selectById(1);
    }
    @RequestMapping("/getStudentById")
    public Student getStudentById(){
        log.info("当前的默认数据源是单数据源,数据源名为 {}", "slave");
        return studentMapper.selectById(1);
    }
}

  • 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

4.0 测试

4.1启动项目

整合成功的图片
出现了上述图片就说明整合多数据源成功。

4.2 动态切换数据源测试

4.2.1 测试master主数据源getTeacherById()方法

测试结果:
在这里插入图片描述

4.2.2 控制台日志显示

在这里插入图片描述

4.2.3测试slave主数据源getStudentById()方法

测试结果:
在这里插入图片描述

@DS注解使用的注意事项

整合是遇见的坑

springboot整合多数据源以及切换遇到的坑 Caused by: java.lang.IllegalStateException: dbType not support : null

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/52415
推荐阅读
相关标签
  

闽ICP备14008679号