一、添加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数据库。