资讯专栏INFORMATION COLUMN

引用两个或多个数据库里的数据,项目数据库的配置方法

hqman / 411人阅读

摘要:解决办法可以在使用完切换数据库的方法拿到需要的数据后,再次调用方法切换回接下来需要用到的数据库。

1、首先配置两个数据源(数据库)以及一个动态数据库:

    
    
        
        
        
        
        
        
        
    

    
    
        
        
        
        
        
        
        
    
    
    
    
        
            
                
                
            
        
        
        
    

2、sqlSessionFactory引用的数据库是动态数据库dynamicDataSource:


    
        
        
        
    

4、事务管理这里要管理的也是上面配置的dynamicDataSource动态数据库:


    
        
    

5、写两个数据源配置类DataSourceContextHolder.java和DynamicDataSource.java来配置数据源,利用ThreadLocal解决线程安全问题。

DataSourceContextHolder 类:

package com.datasource;

public class DataSourceContextHolder {
    private static final ThreadLocal contextHolder = new ThreadLocal();
    public static void setCustomerType(String customerType) {
        contextHolder.set(customerType);
    }
    public static String getCustomerType() {
        return contextHolder.get();
    }
    public static void clearCustomerType() {
        contextHolder.remove();
    }
}

DynamicDataSource 类继承 AbstractRoutingDataSource,并实现determineCurrentLookupKey方法:

package com.datasource;

import java.sql.SQLFeatureNotSupportedException;
import java.util.logging.Logger;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

public class DynamicDataSource extends AbstractRoutingDataSource {

    @Override
    public Logger getParentLogger() throws SQLFeatureNotSupportedException {
        // TODO 自动生成的方法存根
        return null;
    }

    @Override
    protected Object determineCurrentLookupKey() {
        // TODO 自动生成的方法存根
        return DataSourceContextHolder.getCustomerType();
    }

}

6、最后就可以在需要切换数据库的地方使用以下方法来切换数据库了,要切换的数据库名字即之前在配置动态数据库时给引用的数据库赋的名字:

DataSourceContextHolder.setCustomerType("要切换的数据库名字");

7、下面附上我的目录结构:

注:每次使用完切换数据库的方法后,系统会自动切换回默认数据库,不过这之间存在一点小延迟,会出现在调用完切换数据库的方法后,立刻去跳转到引用另外一个数据库数据的页面,系统还是使用着切换后的数据库。

解决办法:可以在使用完切换数据库的方法拿到需要的数据后,再次调用 DataSourceContextHolder.setCustomerType() 方法切换回接下来需要用到的数据库。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/73745.html

相关文章

  • 阿里巴巴开源框架JarsLink

    摘要:也是阿里巴巴的开源项目之一,目前在微贷事业群广泛使用。模块的版本,如果版本号和之前加载的不一致,框架则会重新加载模块。 JarsLink (原名Titan) 是一个基于JAVA的模块化开发框架,它提供在运行时动态加载模块(一个JAR包)、卸载模块和模块间调用的API。也是阿里巴巴的开源项目之一 https://github.com/alibaba/ja...,目前在微贷事业群广泛使用。...

    coolpail 评论0 收藏0
  • 阿里巴巴开源框架JarsLink

    摘要:也是阿里巴巴的开源项目之一,目前在微贷事业群广泛使用。模块的版本,如果版本号和之前加载的不一致,框架则会重新加载模块。 JarsLink (原名Titan) 是一个基于JAVA的模块化开发框架,它提供在运行时动态加载模块(一个JAR包)、卸载模块和模块间调用的API。也是阿里巴巴的开源项目之一 https://github.com/alibaba/ja...,目前在微贷事业群广泛使用。...

    lanffy 评论0 收藏0
  • 阿里巴巴开源框架JarsLink

    摘要:也是阿里巴巴的开源项目之一,目前在微贷事业群广泛使用。模块的版本,如果版本号和之前加载的不一致,框架则会重新加载模块。 JarsLink (原名Titan) 是一个基于JAVA的模块化开发框架,它提供在运行时动态加载模块(一个JAR包)、卸载模块和模块间调用的API。也是阿里巴巴的开源项目之一 https://github.com/alibaba/ja...,目前在微贷事业群广泛使用。...

    Jason 评论0 收藏0

发表评论

0条评论

hqman

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<