何为多数据源
一个工程项目可以同时连接使用多个数据库,主要用于的场景是【一主多从、读写分离】
实现细节
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 ServiceImplimplements 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 MybatisPlusV20.0.1-SNAPSHOT MybatisPlusV2 Demo project for Spring Boot 1.8 UTF-8 UTF-8 2.6.13 org.springframework.boot spring-boot-starterorg.springframework.boot spring-boot-starter-testtest mysql mysql-connector-javacom.baomidou mybatis-plus-boot-starter3.5.1 org.projectlombok lombokcom.baomidou dynamic-datasource-spring-boot-starter3.5.2 org.springframework.boot spring-boot-dependencies${spring-boot.version} pom import org.apache.maven.plugins maven-compiler-plugin3.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