总结:
1.当前我们有两个数据源,要切换备数据源,通过@DS('备数据源名称'),注意该名称是在yml配置数据源配置的
2.@DS('备数据源名称') 可以放在接口,类,方法上,如果放在接口上那么接口的全部方法都是切换到备数据源的,类同理。 当然,最好是把需要切换备数据源的统一都写到dao层的接口,直接对接口上加注解,统一管理, 你也可以在service层某个方法调用到某个dao层接口(备数据源),再在该方法上面加注解@DS,适用于当切换数据源的情况较少的时候可以这么多,如果多的话,统一放dao层接口比较好维护
3.什么情况下@DS会失效? 也就是前面说的,如果上层也就是servic或者其他层都可以,只要调用了我们需要切换数据源、加@DS注解的具体方法(建议统一写到dao层接口下统一管理),而且上层调用中存在了@Transactional事务,那么@DS就会失效,可以理解为上层创建了一个事务,那么这个事务默认的数据源就是yml配置的默认数据源比如mysql, 那么在这个事务下,就不能切换访问到备数据源了,所以我们需要在该具体的dao层接口的方法中,加上事务@propagation = Propagation.REQUIRES_NEW, 注意这个传播方式,是上层方法有事务,那么当前新创建事务,把上层挂起,这样另起一个事务就可以访问到对应的备数据源了,也就是@DS+@propagation = Propagation.REQUIRES_NEW搭配使用才能成功访问到备数据源
4.优化: 如果切