原标题:Springboot多数据源切换
有些数据量不大,又不是生产环境的操作,用到数据工具还需要开通网络策略,还要做N多配置,最终测试稳定后又不再使用,不划算。考虑到操作机上开了生产、UAT、测试环境的访问策略,通过代码来实现数据抽取、过程调用其实也蛮方便。这之中涉及多数据源切换还比较有意思~
首先在IDEA上创建一个SpringBoot项目,这里配置文件如图:
主从数据库配置如图,多个从数据库可以依次排列。创建类DynamicDataSourceContextHolder持有数据库键如下图所示:
ThreadLocal变量用来决定具体使用哪一个数据库源。创建类DynamicDataSourceRegister实现ImportBeanDefinitionRegistrar,用来自定义注册bean。
注意在添加数据源时,默认数据源、目标数据源分别的名称为defualtTargetSources与targetDataSources,是因为AbstractRoutingDataSource类
通过继承该类并实现determineCurrent-
LookupKey方法来决定当前数据源。至此只需要每次需要进行数据库操作的时候将DynamicDataSourceContextHolder.HOLDER置为相应的从数据库的key值就可以直接对数据库进行操作(Dao层),如果不指定数据库key值将自动使用默认主数据源。
这里我们使用AOP来进行数据库切换,创建一个注解DataSource:
Value存储数据库的key值。使用@Aspect在持有DataSource注解的方法前后进行切入操作:
只需要在相应的Dao方法上加DataSource注解并设置value值,可以对数据源进行灵活切换。返回搜狐,查看更多
责任编辑: