第一步、准备数据库
新建数据库master,并新建user表
CREATE TABLE `user` (
`id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `user` VALUES ('master_1', '小明', '123456');
INSERT INTO `user` VALUES ('master_2', '小红', '123456');
INSERT INTO `user` VALUES ('master_3', '路人甲', '123456');
创建数据库slave,并新建user表
CREATE TABLE `user` (
`id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `user` VALUES ('slave_1', '小明', '123456');
INSERT INTO `user` VALUES ('slave_2', '小红', '123456');
INSERT INTO `user` VALUES ('slave_3', '路人甲', '123456');
两个数据库的user表的数据除了ID不一样,其他都相同
2、创建springboot项目
在idea里新建一个SpringBoot项目并取名为multi-datasource
3、pom.xml中添加相关依赖
完整的配置文件如下,直接复制即可
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.9</version>
<relativePath/>
</parent>
<groupId>com.example</groupId>
<artifactId>muti-datasource</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.5.9</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
<version>8.0.28</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<!--druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
<!--dynamic-datasource-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
4、修改配置文件
application.properties修为application.yml:master配置主库,slave配置从库
server:
port: 8080
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
dynamic:
primary: master
datasource:
master:
username: root
password: root
url: jdbc:mysql://localhost:3306/master
slave:
username: root
password: root
url: jdbc:mysql://localhost:3306/slave
mybatis:
mapper-locations: classpath:mapper/*Mapper.xml
5、创建mybatis的配置类
新建config包,在config包下新建MybatisConfig.java,并配置mapper包扫描路径
package com.example.multidatasource.config;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;
/**
* mybatis配置类
* @author heyunlin
* @version 1.0
*/
@Configuration
@MapperScan(basePackages = "com.example.multidatasource.mapper")
public class MybatisConfig {
}
6、创建实体类
新建entity包,在entity包下创建User.java
package com.example.multidatasource.entity;
import lombok.Data;
/**
* 用户
* @author heyunlin
* @version 1.0
*/
@Data
public class User {
private String id;
/**
* 用户名
*/
private String username;
/**
* 密码
*/
private String password;
}
7、创建mapper接口
新建mapper包,在mapper包下新建UserMapper.java,并在类中添加两个方法,分别查询master和slave数据库下的user表。
在数据访问层方法上添加@DS注解,指定要使用的数据库。
package com.example.multidatasource.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.example.multidatasource.entity.User;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author heyunlin
* @version 1.0
*/
@Repository
public interface UserMapper {
/**
* 查询全部用户
* @return List<User>
*/
@DS("master")
@Select("selct id, username, password from user")
List<User> selectAllFromMaster();
/**
* 查询全部用户
* @return List<User>
*/
@DS("slave")
@Select("selct id, username, password from user")
List<User> selectAllFromSlave();
}
8、通过springboot test测试
package com.example.multidatasource;
import com.example.multidatasource.entity.User;
import com.example.multidatasource.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
/**
* @author heyunlin
* @version 1.0
*/
@SpringBootTest
class TestUserMapper {
@Autowired
private UserMapper userMapper;
@Test
void contextLoads() {
List<User> master = userMapper.selectAllFromMaster();
List<User> slave = userMapper.selectAllFromSlave();
System.out.println("master");
master.forEach(System.out::println);
System.out.println("slave");
slave.forEach(System.out::println);
}
}
整个项目的目录结构如下
代码已开源,可按需获取,看完这篇文章不要忘了点赞+收藏~
SpringBoot配置多数据源https://gitee.com/he-yunlin/multi-datasource.git