SpringBoot中配置与使用MybatisPlus提供的多数据源【只需两步】

何为多数据源

一个工程项目可以同时连接使用多个数据库,主要用于的场景是【一主多从、读写分离】

实现细节

1.准备两个不同的数据库,并在application.yml中配置主数据源与从数据源,如下所示:

spring:
  datasource:
    dynamic:
      primary: master #设置默认的数据源或者数据源组,默认值即为master
      strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
      datasource:
        master:
          url: jdbc:mysql://127.0.0.1:3306/technology_learn?characterEncoding=utf-8&userSSL=false&serverTimezone=GMT%2B8
          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/zuoye?characterEncoding=utf-8&userSSL=false&serverTimezone=GMT%2B8
          username: root
          password: 123456
          driver-class-name: com.mysql.cj.jdbc.Driver

2.使用注解进行标识:

//主数据源
@Service
@DS("master")
public class UserServiceImpl extends ServiceImpl implements UserService {
}
//从数据源
@Service
@DS("slave_1")
public class GoodsServiceImpl extends ServiceImpl implements GoodsService {
}

3.测试:

@SpringBootTest
public class DuoShuJuYuanTest {
    @Autowired
    private UserService userService;
    @Autowired
    private GoodsService goodsService;
    @Test
    public void test(){
        User user = userService.getById(1);
        System.out.println("这是主数据库中查询到的用户数据:" + user);
        Goods good = goodsService.getById(1);
        System.out.println("这是从数据库中查询到的商品数据:" + good);
    }
}

获取的数据如下,可以看到我们在同一工程中使用不同的数据库进行数据查询与操作成功。

工程完整代码:

//domain///
//User(主)
package com.qing.myplusv2.pojo;
import lombok.Data;
@Data
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
    private Integer deleted;
}
//Goods(从)
package com.qing.myplusv2.pojo;
import lombok.Data;
@Data
public class Goods {
    private Long id;
    private String name;
    private Integer price;
    private String factory;
}
///Mapper/
//UserMapper
package com.qing.myplusv2.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qing.myplusv2.pojo.User;
public interface UserMapper extends BaseMapper {
}
//GoodsMapper
package com.qing.myplusv2.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qing.myplusv2.pojo.Goods;
public interface GoodsMapper extends BaseMapper {
}
///Service/
//GoodsService
package com.qing.myplusv2.service;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qing.myplusv2.pojo.Goods;
import org.springframework.stereotype.Repository;
@Repository
public interface GoodsService extends IService {
}
//UserService
package com.qing.myplusv2.service;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qing.myplusv2.pojo.User;
import org.springframework.stereotype.Repository;
@Repository
@DS("master")
public interface UserService extends IService {
}
///ServiceImpl/
//UserServiceImpl
package com.qing.myplusv2.service.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qing.myplusv2.mapper.UserMapper;
import com.qing.myplusv2.pojo.User;
import com.qing.myplusv2.service.UserService;
import org.springframework.stereotype.Service;
@Service
@DS("master")
public class UserServiceImpl extends ServiceImpl implements UserService {
}
//GoodsServiceImpl
package com.qing.myplusv2.service.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qing.myplusv2.mapper.GoodsMapper;
import com.qing.myplusv2.pojo.Goods;
import com.qing.myplusv2.service.GoodsService;
import org.springframework.stereotype.Service;
@Service
@DS("slave_1")
public class GoodsServiceImpl extends ServiceImpl implements GoodsService {
}

pom.xml中的相关依赖版本如下:

 4.0.0 com.qing.myplusv2 MybatisPlusV2 0.0.1-SNAPSHOT MybatisPlusV2 Demo project for Spring Boot  1.8 UTF-8 UTF-8 2.6.13    org.springframework.boot spring-boot-starter   org.springframework.boot spring-boot-starter-test test    mysql mysql-connector-java    com.baomidou mybatis-plus-boot-starter 3.5.1    org.projectlombok lombok    com.baomidou dynamic-datasource-spring-boot-starter 3.5.2      org.springframework.boot spring-boot-dependencies ${spring-boot.version} pom import       org.apache.maven.plugins maven-compiler-plugin 3.8.1  1.8 1.8 UTF-8    org.springframework.boot spring-boot-maven-plugin ${spring-boot.version}  com.qing.myplusv2.MybatisPlusV2Application true    repackage  repackage