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)

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

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

在这里插入图片描述

二、在spring中使用多数据源

1.引入依赖

<!--        mybatis多数据源-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>2.5.6</version>
        </dependency>

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自动配置

在这里插入图片描述

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);
    }
}

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.mybatisPlus多数据源的使用场景;
2.基于mybatisPlus实现在一个项目中使用多数据源;

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
mybatis-plus 支持多数据源配置,可以通过配置不同的数据源来连接不同的数据库。下面是一个简单的示例。 1. 配置数据源 在配置文件添加多个数据源的配置,例如: ``` spring.datasource.master.url=jdbc:mysql://localhost:3306/master?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8 spring.datasource.master.username=root spring.datasource.master.password=root spring.datasource.slave.url=jdbc:mysql://localhost:3306/slave?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8 spring.datasource.slave.username=root spring.datasource.slave.password=root ``` 2. 配置多数据源MybatisPlusConfig 类配置多数据源,例如: ```java @Configuration public class MybatisPlusConfig { @Primary @Bean(name = "masterDataSource") @ConfigurationProperties(prefix = "spring.datasource.master") public DataSource masterDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "slaveDataSource") @ConfigurationProperties(prefix = "spring.datasource.slave") public DataSource slaveDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "dynamicDataSource") public DataSource dynamicDataSource(@Qualifier("masterDataSource") DataSource masterDataSource, @Qualifier("slaveDataSource") DataSource slaveDataSource) { Map<Object, Object> targetDataSources = new HashMap<>(); targetDataSources.put("master", masterDataSource); targetDataSources.put("slave", slaveDataSource); DynamicDataSource dynamicDataSource = new DynamicDataSource(); dynamicDataSource.setTargetDataSources(targetDataSources); dynamicDataSource.setDefaultTargetDataSource(masterDataSource); return dynamicDataSource; } @Bean public SqlSessionFactory sqlSessionFactory(@Qualifier("dynamicDataSource") DataSource dynamicDataSource) throws Exception { MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean(); sqlSessionFactory.setDataSource(dynamicDataSource); sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/**/*.xml")); sqlSessionFactory.setGlobalConfig(globalConfiguration()); return sqlSessionFactory.getObject(); } @Bean public GlobalConfiguration globalConfiguration() { GlobalConfiguration globalConfiguration = new GlobalConfiguration(); globalConfiguration.setSqlInjector(new LogicSqlInjector()); globalConfiguration.setMetaObjectHandler(new MyMetaObjectHandler()); globalConfiguration.setDbType(DbType.MYSQL); return globalConfiguration; } } ``` 3. 配置动态数据源 在 DynamicDataSource 类实现动态数据源,例如: ```java public class DynamicDataSource extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { return DataSourceContextHolder.getDataSource(); } } ``` 4. 设置数据源 在需要使用数据源的地方,通过设置数据源的方式来使用不同的数据源,例如: ```java @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Override public List<User> listByDataSource(String dataSource) { DataSourceContextHolder.setDataSource(dataSource); List<User> userList = list(); DataSourceContextHolder.clearDataSource(); return userList; } } ``` 以上就是 mybatis-plus 多数据源的简单示例,实际应用需要根据具体情况进行配置和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Perley620

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值