SpringBoot 、MybatisPlus 配置多数据源

版权声明:博客原创,转载须标明出处 https://blog.csdn.net/qq_24232123/article/details/86165951

先贴上配置多数据源用到的jar ,其他核心包自行加入

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>2.4.2</version>
        </dependency>

贴上这一块的yml 配置

spring:
  datasource:
    dynamic:
      primary: Read    #此处配置默认库为 Read
      datasource:
       Read:
        url: jdbc:mysql://127.0.0.1/kuRead?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
        username: root
        password: root
        driver-class-name: com.mysql.cj.jdbc.Driver
        type: com.zaxxer.hikari.HikariDataSource
       write:
        url: jdbc:mysql://127.0.0.1/kuWrite?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
        username: root
        password: root
        driver-class-name: com.mysql.cj.jdbc.Driver
        type: com.zaxxer.hikari.HikariDataSource

下面是测试写法demo扩展
注:方法注解优先于类上注解,尽量不要在类上使用多个,防止不明问题

1: @DS 注解在此方法上,此方法就会使用对应的库 ,如果使用了非默认库,不加注解的话会报错 
    @RequestMapping("/get")
    @GetMapping
    @DS("write")
    public Object get(){
        return userService.list(null);
    }

 // 这个也可以写在方法上 ,
@DS("write")
public interface UserDao extends BaseMapper<User> {
}


2:如果多个相同的库或者相同的表时,可以通用dao,servcie,impl ,model 如下:
    @RequestMapping("/get")
    @GetMapping
    @DS("write")
    public Object get(){
        return userinfoService.list(null);
    }

    @RequestMapping("/get1")
    @GetMapping
    @DS("read")
    public Object get1(){
        return userinfoService.list(null);
    }
  这2个方法的指定库不同,查到的结果也不同  
    
    
3: 假如共用dao等情况下,方法中有新增,查询等逻辑的时候,我们可以把具体逻辑分一下:如:

    @DS("read")
    public List<Userinfo> getlist() {
        return UserinfoDao.getlist();
    }

    @DS("write")
    public void insertUser(User po) {
        userDao.insert(po);
    }

    public void get00() {
        User po=new User();
        po.setAge(2);
        po.setName("2");
        po.setPhone("2");
        userinfoService.insertUser(po);  
        System.out.println(JSON.toJSONString( userinfoService.getlist()));
    }
此方式也可以直接写在控制器中,写在service会好一点

猜你喜欢

转载自blog.csdn.net/qq_24232123/article/details/86165951