资讯专栏INFORMATION COLUMN

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

Me_Kun / 3134人阅读

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

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/35665.html

相关文章

  • 引用两个多个数据数据项目数据配置方法

    摘要:解决办法可以在使用完切换数据库的方法拿到需要的数据后,再次调用方法切换回接下来需要用到的数据库。 1、首先配置两个数据源(数据库)以及一个动态数据库: ...

    hqman 评论0 收藏0
  • 阿里巴巴开源框架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
  • 实践App内存优化:如何有序地做内存分析与优化

    摘要:本文主要会根据实际项目中优化步骤分为以下几部分内存分析基础内存泄漏静态内存分析优化运行时内存分析优化监控内存分析基础这部分主要先介绍一些进行内存分析的基础方法以及工具,对这部分比较熟悉的同学可以先跳过哈。 由于项目里之前线上版本出现过一定比例的OOM,虽然比例并不大,但是还是暴露了一定的问题,所以打算对我们App分为几个步骤进行内存分析和优化,当然内存的优化是个长期的过程,不是一两个版...

    keelii 评论0 收藏0

发表评论

0条评论

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