mybatis-plus多数据源手工代替@DS进行数据源切换
在使用mybatis-plus的多数据源配置是,可以通过@DS
注解轻松进行切换,该注解可以用在方法或者类上,但是如果在类似Configuration
配置类中要动态切换从apollo中加载过来的多数据源时,该怎么做呢?
类似源代码如下,但是这里的数据源默认会使用primary的数据源,不能通过@DS
进行切换(如果你有方法也可以留言!)
@Configuration public class ElectionConfiguration { @Bean public Election election(DataSource dataSource) throws ElectionException { return new DistributedElection(ClusterType.SDA_OPC.getCode(), dataSource); } }
但现在的需求就是要改变这里的dataSource
为自己想要的那个数据源,比如我这里就想让它变成slave1
数据源,该怎么做?潘老师经过debug和翻看源码,发现可以通过如下方式进行实现:
@Configuration public class ElectionConfiguration { @Bean public Election election(DataSource dataSource) throws ElectionException { DynamicRoutingDataSource dynamicRoutingDataSource = (DynamicRoutingDataSource)dataSource; DataSource slave1= dynamicRoutingDataSource.getDataSource("slave1"); return new DistributedElection(ClusterType.SDA_OPC.getCode(), slave1); } }
值得一提的是,动态数据源使用的是DynamicRoutingDataSource
类,需要进行强转,强转完之后可以通过 getDataSource
方法传入数据源名称就可以获取到对应的额数据源,其实@DS
的原理就是这样的,这里的数据源名称就是@DS
的参数名称。
ok,以上就是mybatis-plus多数据源使用手工方式代替@DS
来进行数据源切换的,如果你有更好的方案,可以留言!