约定
- 本框架只做 切换数据源 这件核心的事情,并不限制你的具体操作,切换了数据源可以做任何CRUD。
- 配置文件所有以下划线
_
分割的数据源 首部 即为组的名称,相同组名称的数据源会放在一个组下。 - 切换数据源即可是组名,也可是具体数据源名称,切换时默认采用负载均衡机制切换。
- 默认的数据源名称为 master ,你可以通过spring.datasource.dynamic.primary修改。
- 方法上的注解优先于类上注解。
建议
强烈建议在 主从模式 下遵循普遍的规则,以便他人能更轻易理解你的代码。
主数据库 建议 只执行 INSERT
UPDATE
DELETE
操作。
从数据库 建议 只执行 SELECT
操作。
说多了没有用 ,开始操作吧!
引用依赖
<properties>
<java.version>1.8</java.version>
<mybatis-puls.version>3.2.0</mybatis-puls.version>
<freemarker.version>2.3.29</freemarker.version>
<mysql.version>5.1.31</mysql.version>
<fastjson.version>1.2.58</fastjson.version>
<commons.lang.version>2.6</commons.lang.version>
</properties>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-puls.version}</version>
</dependency>
<!-- 配置阿里druid连接池,通过改变spring.datasource.type设置数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.4.2</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!--sql server-->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<scope>runtime</scope>
</dependency>
配置yml
spring:
datasource:
dynamic:
driver-class-name: com.mysql.jdbc.Driver
primary: master
datasource:
master:
username: root
password: ****
url: jdbc:mysql://localhost:3306/***?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
slave_1:
username: root
password: ****
url: jdbc:mysql://localhost:3306/***?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
sql_server:
username: admin
password: *****
url: jdbc:sqlserver://***.**.***.***:****;databaseName=*****
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
autoconfigure:
exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
然后启动项目(我配置了三个数据源两个MySQL 一个sqlserver)
现在已经配置成功
可以使用了
- 使用 @DS 切换数据源。
@DS 可以注解在方法上和类上,同时存在方法注解优先于类上注解。
注解在service实现或mapper接口方法上,但强烈不建议同时在service和mapper注解。 (可能会有问题)
注解 | 结果 |
---|---|
没有@DS | 默认数据源 |
@DS("dsName") | dsName可以为组名也可以为具体某个库的名称 |
我使用的
官方详细地址参考 https://mp.baomidou.com/guide/dynamic-datasource.html
效果