引入 dynamic-datasource:
com.baomidou dynamic-datasource-spring-boot-starter 3.3.2
application.yml 数据源配置:
spring: datasource: dynamic: primary: master #设置默认的数据源或者数据源组,默认值即为master strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 datasource: master: url: jdbc:postgresql://ip:port,ip2:port2/rwddb?binaryTransfer=False&forceBinary=False&reWriteBatchedInserts=true&loadBalanceHosts=true&targetServerType=master username: *** password: **** driver-class-name: org.postgresql.Driver slave_1: url: jdbc:postgresql://ip:port,ip2:port/rwddb?binaryTransfer=False&forceBinary=False&reWriteBatchedInserts=true&loadBalanceHosts=true&targetServerType=master username: **** password: *** driver-class-name: org.postgresql.Driver
详细使用请看 MyBatis-Plus官网
这种场景还是比较常见,比如在一个为master数据源的调用slave数据源就会失效
@DS("slave_1") //切换数据源 @Override public boolean update(User user) { UserMapper.update(user); return true; }
@Override public boolean save(User user) { this.saveBatch(user.getRoles());//没有指定数据源,走primary配置的数据源master userService.update(user);//走从数据源 ... return true; }
这里会出现没有走slave_1,依然还是master数据源
需要在salve数据源上另起一个事务,比如:
@DS("slave_1") //切换数据源 @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW) @Override public boolean update(User user) { UserMapper.update(user); return true; }