当前位置:Gxlcms > 数据库问题 > Spring+Mybatis项目中通过继承AbstractRoutingDataSource实现数据库热切换

Spring+Mybatis项目中通过继承AbstractRoutingDataSource实现数据库热切换

时间:2021-07-01 10:21:17 帮助过:35人阅读

id="dynamicDataSource" class="cn.jteee.sycerp.server.datasources.DynamicDataSource">
   <property name="targetDataSources">
       <map>
           <entry value-ref="dataSource" key="sycerp_system"/>
       </map>
   </property>
   <property name="defaultTargetDataSource" ref="dataSource"/>
</bean>

其中dynamicDataSource就是上面实现AbstractRoutingDataSource的类,里面ref的dataSource就是默认的数据源,其他配置数据ref的地方就使用这个dynamicDataSource,而不是dataSource。

  最后就是怎么使用。因为dynamicDataSource已经被spring管理起来了,所以,我们只需要在我们会用到的地方先生成一个数据库名称列表,可以从其他数据库中查询,然后调用refreshDataSources方法,最后调用

DataSourceContextHolder.setDataSourceType("你要切换的数据库名称");

下面是DataSourceContextHolder的代码

public class DataSourceContextHolder {

    private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();

    public static void setDataSourceType(String dataSourceType) {
        contextHolder.set(dataSourceType);
    }

    public static String getDataSourceType() {
        return contextHolder.get();
    }

    public static void clearDataSourceType() {
        contextHolder.remove();
    }

}

  到此,一个完整的实现数据库热切换的功能就全部实现了,有其他特定的需求可以在此基础上修改。

本文出自 “伯彧” 博客,请务必保留此出处http://chrischen.blog.51cto.com/9954795/1878517

Spring+Mybatis项目中通过继承AbstractRoutingDataSource实现数据库热切换

标签:abstractroutingdatasource 数据库热切换

人气教程排行