Spring 配置动态数据源
Spring配置动态数据源,是在大型应用中对数据进行切换。一个使用场景就是,万一数据库的master实例挂了怎么办,如何动态的将从数据库替代上去呢? 保证数据库正常的使用呢? 那么Spring动态数据源的配置,就可以很好的解决这个问题,可以将数据源动态切换,将数据源切换到备用的数据库中。
配置多数据源有多中方案:
方案一: 配置多个数据源, 多个数据源分别都有一个sqlSessionFactory, 在使用时分表注入,往哪个库写就就使用哪个sqlSessionFactory
缺点: 修改麻烦,不符合开闭原则
方案二: 配置多个数据源,多个数据源都是使用同一个sqlSessionFactory
优点: 易于维护
Spring 2.x 以后的版本中采用Proxy模式,就是我们在方案中实现一个虚拟的数据源,并且使用它来封装数据源选择逻辑,这样就可以有效的将数据源选择逻辑从Client中分离出来,Client提供选择所需的上下文,由虚拟的DataSource根据Client提供上下文来实现。由虚拟的DataSource根据Client提供的上下文来实现数据源的选择。
|
|
创建一个获取和设置上下文环境的类DataSourceContextHolder,主要负责改变上下文数据源的名称
|
|
创建动态数据源类:
DynamicDataSource:
|
|
注意: 如果需要切换数据源, 那么最好在调用Service 前将数据库中数据进行切换
在Facade 层中进行切换数据源