目录
MyBatis-Plus多数据源配置
引言
为了确保数据库产品的稳定性,很多数据库拥有双机热备功能,所谓双机热备功能其实就是由第一台数据库服务器提供增删改功能,由第二台服务器提供查询功能。如下图所示:
引入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
配置数据源
在application.properties中配置数据源,这里以两个不同的数据库作为主从数据源
spring.datasource.dynamic.primary=master
spring.datasource.dynamic.datasource.master.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.dynamic.datasource.master.url=jdbc:mysql://localhost:3306/mp?useUnicode=true&characterEncoding=UTF-8
spring.datasource.dynamic.datasource.master.username=root
spring.datasource.dynamic.datasource.master.password=root
spring.datasource.dynamic.datasource.slave_1.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.dynamic.datasource.slave_1.url=jdbc:mysql://localhost:3306/mp1?useUnicode=true&characterEncoding=UTF-8
spring.datasource.dynamic.datasource.slave_1.username=root
spring.datasource.dynamic.datasource.slave_1.password=root
实现
创建一个UserService,添加查询和插入方法
package com.cheny.service;
import com.cheny.pojo.User;
import java.util.List;
/**
* @Author 陈雲鑫
* @Date 2021/7/21 15:45
*/
public interface UserService {
public List<User> queryAll();
public void save(User user);
}
通过@DS注释可以更换所使用的数据源,@DS注释遵循局部优先原则
package com.cheny.service.Impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.cheny.mapper.UserMapper;
import com.cheny.pojo.User;
import com.cheny.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Author 陈雲鑫
* @Date 2021/7/21 15:46
*/
// 增删改使用主库
@Service
@DS(value = "master")
public class UserServiceImpl implements UserService {
@Autowired(required = false)
UserMapper userMapper;
// 查询使用从库
@Override
@DS(value = "slave_1")
public List<User> queryAll() {
List<User> users = userMapper.selectList(null);
return users;
}
@Override
public void save(User user) {
userMapper.insert(user);
}
}
测试
package com.cheny;
import com.cheny.pojo.User;
import com.cheny.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
/**
* @Author 陈雲鑫
* @Date 2021/7/21 15:51
*/
@SpringBootTest
public class testUserService {
@Resource(name = "userServiceImpl")
UserService userService;
@Test
public void test(){
User user1 = new User(99,"test",20);
userService.save(user1);
userService.queryAll().forEach(user -> System.out.println(user));
}
}