数据源在spring加载启动完成之后,需要根据不同的业务场景做动态的切换。
解决思路
1、借助spring提供的抽象类AbstractRoutingDataSource,通过继承抽象类,并覆盖determineCurrentLookupKey方法。
2、增加Aspect环绕服务,在before里面设置好数据源本地线程变量、after之后清理掉数据源本地线程变量。
3、每次获取的时候,若数据源本地线程变量为空,则默认走主dataSource。
注意事项
1、Aspect和继承的AbstractRoutingDataSource类之间执行顺序的问题通过设置order来控制。
2、测试动态数据源切换通过启动系统来测试,不是单元测试,单元测试有的时候会失效。