说明:在一些复杂的业务情景,比如我们需要在一个订单审核通过后,在将数据库状态修改的同时,将订单与订单详细这两条数据写入到另一个数据库中。我们就可以通过在配置文件中,配置多数据源,然后通过在Mapper的方法上加@DS注解,来实现这样的业务。
spring:
datasource:
......
dynamic:
datasource:
# 主要的数据库
master:
url: ......
username: ......
password: ......
driver-class-name: ......
# 2号数据库
extends:
url: ......
username: ......
password: ......
driver-class-name: ......
使用@DS注解切换数据源;
@Mapper
public interface OrderMapper extends BaseMapper<Order> {
@DS("extends")
void saveOrder(Order order);
}
问题:使用了注解,配置中也配置了对应的数据源,但是实际操作并没有生效,报数据库表不存在的错误;
@Override
@Transactional(rollbackFor = Exception.class)
public Result<?> orderApprove(Integer id, Integer approveStatus) {
......
}
解决:因为在Service实现类对应的方法上面加了事务注解(@Transactional),事务在跨数据源的情况下是不会生效的,去掉之后就能正常切换数据源了。