记录一次多数据源配置失效的情况

说明:在一些复杂的业务情景,比如我们需要在一个订单审核通过后,在将数据库状态修改的同时,将订单与订单详细这两条数据写入到另一个数据库中。我们就可以通过在配置文件中,配置多数据源,然后通过在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),事务在跨数据源的情况下是不会生效的,去掉之后就能正常切换数据源了。

你可能感兴趣的:(数据库,多数据源,spring,boot)