基于Spring的Web项目运行时切换数据源的一种解决方案

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dawn_after_dark/article/details/81630324

场景需求

需要对于一些请求在运行时访问不同的数据库,并且各个请求是独立的互不影响的。

解决方案

  1. 首先在配置中定义多个数据源,并为每个数据源指定id
  2. 用一个枚举类定义多个数据源id对应的常量值
  3. 用ThreadLocal来为每一个请求保存当前使用的数据源id
  4. 新建一个类,比如为DynamicDataSource,继承AbstractRoutingDataSource并重写其determineCurrentLookupKey方法使其可以返回ThreadLocal中保存的数据源id,并把DynamicDataSource定义为名为dataSource的bean,这样就可以在IOC容器初始化中实例化该数据源管理器。

时序图

这里写图片描述

总结

前往源码包里寻找对DataSource包装类,覆盖方法以提供不同的策略。Spring可扩展性很强,开发者可以很容易扩展这些类来定制自己所需的功能。

猜你喜欢

转载自blog.csdn.net/dawn_after_dark/article/details/81630324