通过研究MyBatis-Plus官网
多数据源支持
dynamic-datasource
是一个开源的 Spring Boot 多数据源启动器,提供了丰富的功能,包括数据源分组、敏感信息加密、独立初始化表结构等。
使用方法:
-
引入依赖
<!--多个数据源-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
注意:项目中已经存在的mybatis的依赖需要注释,防止下面的共同存在的mybatis-spring产生冲突
-
配置数据源:如
spring.datasource.dynamic.primary=db1
spring.datasource.dynamic.strict=false
spring.datasource.dynamic.datasource.db1.url=jdbc:mysql://localhost:3306/ican?characterEncoding=utf-8&useUnicode=true&serverTimezone=UTC&allowMultiQueries=true
spring.datasource.dynamic.datasource.db1.username=root
spring.datasource.dynamic.datasource.db1.password=123456
spring.datasource.dynamic.datasource.db1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.dynamic.datasource.db2.url=jdbc:mysql://192.168.21.37:3306/210_bm_inventory?useUnicode=true&allowPublicKeyRetrieval=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true
spring.datasource.dynamic.datasource.db2.username=root
spring.datasource.dynamic.datasource.db2.password=root123
spring.datasource.dynamic.datasource.db2.driver-class-name=com.mysql.cj.jdbc.Driver
一共配置了两个数据源 db1和db2 其中spring.datasource.dynamic.primary=db1配置主数据源为db1(没有注解时默认为主数据源)
spring.datasource.dynamic.strict=false 这个设置的是严格模式,true为开启,false为关闭。
开启@DS(db3) db3并不存在会直接报错,不开启则会采用主数据源进行二次尝试
-
使用
@DS
切换数据源:
@Mapper
public interface InventoryDao {
@PageX
@DS("db2")
List<Inventory> select(InventoryQuery query);
Integer insert(Inventory inventory);
Integer insertBatch(List<Inventory> inventorys);
Integer update(Integer id, int optionQty, int version,String lastUpdateBy);
Integer delete(Integer id);
}
类或者方法上都能加注释,注释括号里可以为组名(也就是2里面配置的db1,db2)也可以为具体某个库的名称。
目前主要用于wms仓储系统直接操作北猫商城里的inventory表。
如果引入不了依赖选择删除maven库中的具体文件夹或者依赖冲突可以选择直接删除总的maven库,或者解决冲突:进入pom
红线的就是有冲突的包
可以根据手动删除依赖、在Plugins下载Maven Helper插件进行解决、或者配置冲突子类不启动