mybatis-plus实现代码层面的读写分离
·
一、添加mybatis-plus相关依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
二、设置数据源配置
spring:
application:
name: rtt
datasource:
dynamic:
primary: master
datasource:
master:
url: jdbc:mysql://192.168.0.1:3306/datasync?&useUnicode=true&characterEncoding=utf8&serverTimezone=CTT
username: mysql
password: mysql
driver-class-name: com.mysql.cj.jdbc.Driver
slave_1:
url: jdbc:mysql://192.168.0.2:3306/datasync?&useUnicode=true&characterEncoding=utf8&serverTimezone=CTT
username: mysql
password: mysql
driver-class-name: com.mysql.cj.jdbc.Driver
slave_2:
url: jdbc:mysql://192.168.0.3:3306/datasync?&useUnicode=true&characterEncoding=utf8&serverTimezone=CTT
username: mysql
password: mysql
driver-class-name: com.mysql.cj.jdbc.Driver
master为主库,负责增删改;slave_1、slave_2为从库,负责查询。
三、编写mybatis-plus配置类
@Configuration
@EnableTransactionManagement
@MapperScan("com.zq.datasync.mapper")
public class MybatisPlusConfig {
/**
* 分页配置
* @return
*/
@Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}
/**
* 乐观锁配置
* @return
*/
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
/**
* 读写分离配置
* @return
*/
@Bean
public MasterSlaveAutoRoutingPlugin masterSlaveAutoRoutingPlugin() {
return new MasterSlaveAutoRoutingPlugin();
}
}
四、测试
@RestController
@RequestMapping("/person")
public class PersonController {
@Autowired
private IPersonService personService;
@PostMapping("save")
public ResponseResult add(@RequestBody Person person) {
personService.save(person);
return ResponseResultUtil.success();
}
@PutMapping("update")
public ResponseResult update(@RequestBody Person person) {
Person o = personService.getById(person.getId());
if (o != null) {
BeanCopyUtil.copyPropertiesIgnoreNull(person, o);
personService.updateById(o);
}
return ResponseResultUtil.success();
}
@DeleteMapping("delete/{id}")
public ResponseResult delete(@PathVariable Long id) {
personService.removeById(id);
return ResponseResultUtil.success();
}
@GetMapping("list")
@DS("slave")
public ResponseResult list() {
return ResponseResultUtil.success(personService.list());
}
}
当调用/person/save、/person/update、/person/delete/1接口时,操作的是master数据库;当调用/person/list接口时,轮训操作slave_1、slave_2数据库。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)