springboot整合mybatis-plus多数据源配置
参考网址:
springboot的ssm整合mybatis-plus项目的快速构建,使用的是阿里的在线构建项目工具
https://start.aliyun.com/bootstrap.html
mybatis-plus多数据配置参考mybatis-plus中文官网
https://mybatis.plus/
https://dynamic-datasource.com/guide/
1.使用Aliyun Java Initializr快速构建项目
访问网址:
https://start.aliyun.com/bootstrap.html
使用****Aliyun Java Initializr****快速构建一个springboot+mybatis-plus的项目
- 选择项目的类型
- 选择需要添加的依赖
- 使用git拉取项目
2.准备数据库和表
建库脚本
CREATE TABLE `demo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
)
显示每个库对应的表中的数据
MariaDB [yonghedb]> use test;
Database changed
MariaDB [test]> select * from demo;
+----+--------------+
| id | name |
+----+--------------+
| 1 | 数据源master |
| 2 | 数据源master |
| 3 | 数据源master |
+----+--------------+
3 rows in set (0.000 sec)
MariaDB [test]> use ssm;
Database changed
MariaDB [ssm]> select * from demo;
+----+---------------+
| id | name |
+----+---------------+
| 1 | 数据源slave_2 |
| 2 | 数据源slave_2 |
| 3 | 数据源slave_2 |
+----+---------------+
3 rows in set (0.000 sec)
MariaDB [ssm]> use yonghedb;
Database changed
MariaDB [yonghedb]> select * from demo;
+----+---------------+
| id | name |
+----+---------------+
| 1 | 数据源slave_1 |
| 2 | 数据源slave_1 |
| 3 | 数据源slave_1 |
+----+---------------+
3 rows in set (0.000 sec)
3.整改springboot项目
- 修改springboot的配置文件
把application.properties改为application.yml
具体内容如下
server:
port: 8080
spring:
datasource:
dynamic:
primary: master #设置默认的数据源或者数据源组,默认值即为master
strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源.
datasource:
master:
url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
slave_1:
url: jdbc:mysql://localhost:3306/yonghedb?serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
slave_2:
url: jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
- 引入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
- 写实体类
说明:
方便测试期间,我们就使用一个实体类
Emp.java
package com.shaoming;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
/**
* @author shaoming
* @Date: 2021/3/28 15:57
* @Description:
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@TableName("demo")
public class Demo {
@TableField("id")
@TableId(value = "id",type = IdType.AUTO)
private Integer id;
@TableField("name")
private String name;
}
3.写对应的3个mapper接口
DemoMasterMapper.java
package com.shaoming;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* @author shaoming
* @Date: 2021/3/28 15:59
* @Description:
*/
@Mapper
/**
* 指定是master数据源,当然也可以不指定,默认的就是master数据源
*/
@DS("master")
public interface DemoMasterMapper extends BaseMapper<Demo> {
}
DemoSalve1Mapper.java
package com.shaoming;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* @author shaoming
* @Date: 2021/3/28 15:59
* @Description:
*/
@Mapper
/**
* 指定的是slave_1数据源
*/
@DS("slave_1")
public interface DemoSalve1Mapper extends BaseMapper<Demo> {
}
DemoSalve2Mapper.java
package com.shaoming;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* @author shaoming
* @Date: 2021/3/28 15:59
* @Description:
*/
@Mapper
/**
* 指定的是slave_2数据源
*/
@DS("slave_2")
public interface DemoSalve2Mapper extends BaseMapper<Demo> {
}
4.@DS注解的介绍和使用
@DS 可以注解在方法上或类上,同时存在就近原则 方法上注解 优先于 类上注解。
注解 | 结果 |
---|---|
没有@DS | 默认数据源 |
@DS(“dsName”) | dsName可以为组名也可以为具体某个库的名称 |
5.测试
说明:
使用springboot的测试功能进行测试
package com.shaoming.springbootmpmoredatasource;
import com.shaoming.DemoMasterMapper;
import com.shaoming.DemoSalve1Mapper;
import com.shaoming.DemoSalve2Mapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
/**
* @author shaoming
* @Date: 2021/3/28 16:00
* @Description:
*/
@SpringBootTest
public class DaoTest {
@Autowired
private DemoMasterMapper demoMasterMapper;
@Autowired
private DemoSalve1Mapper demoSalve1Mapper;
@Autowired
private DemoSalve2Mapper demoSalve2Mapper;
@Test
public void testfindall() {
System.out.println("master数据源查出来的信息");
System.out.println(demoMasterMapper.selectList(null));
System.out.println("salve_1数据源查出来的信息");
System.out.println(demoSalve1Mapper.selectList(null));
System.out.println("salve_2数据源查出来的信息");
System.out.println(demoSalve2Mapper.selectList(null));
}
}
控制台打印:
master数据源查出来的信息
[Demo(id=1, name=数据源master), Demo(id=2, name=数据源master), Demo(id=3, name=数据源master)]
salve_1数据源查出来的信息
[Demo(id=1, name=数据源slave_1), Demo(id=2, name=数据源slave_1), Demo(id=3, name=数据源slave_1)]
salve_2数据源查出来的信息
[Demo(id=1, name=数据源slave_2), Demo(id=2, name=数据源slave_2), Demo(id=3, name=数据源slave_2)]
不指定master数据源进行测试
修改DemoMasterMapper.java内容
package com.shaoming;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* @author shaoming
* @Date: 2021/3/28 15:59
* @Description:
*/
@Mapper
/**
* 指定是master数据源,当然也可以不指定,默认的就是master数据源
*/
//@DS("master")
public interface DemoMasterMapper extends BaseMapper<Demo> {
}
修改的地方
去掉@DS(“master”)
控制台打印:
master数据源查出来的信息
[Demo(id=1, name=数据源master), Demo(id=2, name=数据源master), Demo(id=3, name=数据源master)]
salve_1数据源查出来的信息
[Demo(id=1, name=数据源slave_1), Demo(id=2, name=数据源slave_1), Demo(id=3, name=数据源slave_1)]
salve_2数据源查出来的信息
[Demo(id=1, name=数据源slave_2), Demo(id=2, name=数据源slave_2), Demo(id=3, name=数据源slave_2)]
结论:
如果使用注解指定数据源,默认的就是master数据源
博客推荐
个人csdn博客网址:https://blog.csdn.net/shaoming314
个人博客网址:www.shaoming.club
个人gitee地址:https://gitee.com/shao_ming314/note