一、动态多数据源的场景
- 应用不拆,数据库拆
- 读写分离
二、动态多数据源的实现
使用dynamic-datasource-spring-boot-starter依赖包
使用@DS(value = “数据源”)注解
三、实现过程
事先准备
这里创建了两个数据库db1和db2
user表在db1数据库
book表在db2数据库
1、依赖
<!--MySQL数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--Mybatis-Plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
<!--多数据源-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
2、application.yaml
primary表示默认使用哪个数据源
server:
port: 7080
spring:
datasource:
dynamic:
datasource:
# 数据源1
db1:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/db1?useUnicode=true&characterEncoding=utf-8
username: root
password: root
# 数据源2
db2:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/db2?useUnicode=true&characterEncoding=utf-8
username: root
password: root
primary: db1
mybatis-plus:
mapper-locations: classpath:/mapper/*.xml ## 配置MyBatis-Plus扫描Mapper文件的位置
3、实现好基本的代码
测试
四、测试
实现查询db1里user表的用户列表并往db2里的book表插入一条数据
1、TestController
@Slf4j
@RestController
@RequestMapping("/api/test/")
public class TestController {
@Autowired(required = false)
private UserService userService;
@GetMapping("t1")
public List<UserDO> t1() {
List<UserDO> list = userService.list();
return list;
}
}
2、BookService
写一个插入的方法
public interface BookService {
int insertDO(BookDO bookDO);
}
3、BookServiceImpl
实现插入的方法
这里要注意,在方法体上加入@DS注解
@DS()里的value就是yaml配置文件里的数据源名称
@Service
public class BookServiceImpl implements BookService {
@Autowired(required = false)
private BookMapper bookMapper;
@Override
@DS(value = "db2") // 声明使用db2数据源
public int insertDO(BookDO bookDO) {
return bookMapper.insert(bookDO);
}
}
4、UserServiceImpl
@Slf4j
@Service
public class UserServiceImpl implements UserService {
@Autowired(required = false)
private UserMapper userMapper;
@Autowired(required = false)
private BookService bookService;
@Override
public List<UserDO> list() {
List<UserDO> userDOList = userMapper.selectList(null);
BookDO bookDO = new BookDO();
bookDO.setTitle("查令十字街84号");
bookDO.setPrice(19.9);
bookService.insertDO(bookDO);
log.info("book:{}", bookDO);
return userDOList;
}
}
5、使用ApiFox进行接口调试
发现成功地查询了user表的用户列表
并且book表成功地插入了一条数据
评论区