• MyBatis-Plus多数据源——如何在一个项目中使用多个MySQL数据库


    在这里插入图片描述

    前言

    MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window) 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

    本系列博客结合实际应用场景,阐述MyBatis-Plus实际应用中的问题以及使用方法。

    本篇博客介绍如何基于mybatisPlus实现在一个项目中使用多数据源

    官网:https://baomidou.com/

    引出


    1.mybatisPlus多数据源的使用场景;
    2.基于mybatisPlus实现在一个项目中使用多数据源;

    一、多数据源应用场景

    1.主从同步,读写分离

    主从同步,读写分离

    在这里插入图片描述

    创建一个数据用户,控制其权限

    mysql> create user 'slave01'@'%' identified WITH mysql_native_password by '123';
    Query OK, 0 rows affected (0.00 sec)
    mysql> grant select ON *.* to 'slave01'@'%';
    Query OK, 0 rows affected (0.00 sec)
    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.可能数据存储在不同的数据源

    可能需要查不同数据源的数据库

    在这里插入图片描述

    二、在spring中使用多数据源

    1.引入依赖

    
            <dependency>
                <groupId>com.baomidougroupId>
                <artifactId>dynamic-datasource-spring-boot-starterartifactId>
                <version>2.5.6version>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.配置多个数据源

    spring:
      main:
        allow-circular-references: true
      datasource:
        dynamic:
          primary: mysql_centos #配置主数据源
          datasource:
            mysql_yun: # 数据源的名字,第一个数据源
              url: jdbc:mysql://124.70.138.34:3306/fresh_db_test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&allowMultiQueries=true
              username: root
              password: XXXX
              driver-class-name: com.mysql.cj.jdbc.Driver
            mysql_centos: # 数据源的名字,第二个数据源
              url: jdbc:mysql://192.168.111.130:3306/fresh_customer_db?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&allowMultiQueries=true
              username: root
              password: 123
              driver-class-name: com.mysql.cj.jdbc.Driver
          druid:
            initial-size: 1
            max-active: 20
            min-idle: 1
            max-wait: 60000
      # 去除一下durid的自动装配
      autoconfigure:
        exclude: org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration   #去除Druid自动配置
    
    • 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

    在这里插入图片描述

    3.使用@DS注解标识

    在这里插入图片描述

    package com.tianju.fresh.service;
    
    
    import com.baomidou.dynamic.datasource.annotation.DS;
    import com.tianju.fresh.entity.Customer;
    import com.tianju.fresh.mapper.CustomerMapper;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    
    @Service
    public class TestManyDatasource {
        @Autowired
        private CustomerMapper customerMapper;
    
        @DS("mysql_yun")
        public void findFromHuawei(){
            System.out.println("云服务器上的数据库");
            List<Customer> all = customerMapper.findAll();
            System.out.println(all);
        }
        @DS("mysql_centos")
        public void findFromLocal(){
            System.out.println("本地虚拟机的数据库");
            List<Customer> all = customerMapper.findAll();
            System.out.println(all);
        }
    }
    
    • 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

    3.默认数据库

    配置yml文件中
    primary: mysql_centos #配置主数据源
    的作用如下,默认数据库

    在这里插入图片描述

    4.根据注解决定去那个数据库

    @DS(“mysql_yun”)
    由注解确定去哪个数据源进行查找

    在这里插入图片描述

    package com.tianju.fresh;
    
    
    import com.tianju.fresh.service.TestManyDatasource;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    @SpringBootTest
    @RunWith(SpringJUnit4ClassRunner.class)
    public class ManyDataSourceTest {
    
        @Autowired
        private TestManyDatasource manyDatasource;
    
        @Test
        public void test2(){
            manyDatasource.findFromHuawei();
            manyDatasource.findFromLocal();
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    总结

    1.mybatisPlus多数据源的使用场景;
    2.基于mybatisPlus实现在一个项目中使用多数据源;

  • 相关阅读:
    note++ 操作技巧
    微信小程序使用 npm 包,举例图文详解
    跟着cherno手搓游戏引擎【27】升级2DRenderer(添加旋转)
    网络安全入门必知的靶场!
    07 数列极限存在的条件
    创建 SAP Fiori Catalog 时遇到的 duplicate 记录的问题分析
    【idea】使用教程:idea 打开项目、配置、项目打包详细教程
    HttpClient
    ARM相关知识概括
    Gin 笔记(06)— 设置不同启动模式、优雅启动和关闭、运行多个不同端口的服务进程
  • 原文地址:https://blog.csdn.net/Pireley/article/details/133344286