摘要:解决办法可以在使用完切换数据库的方法拿到需要的数据后,再次调用方法切换回接下来需要用到的数据库。
1、首先配置两个数据源(数据库)以及一个动态数据库:
2、sqlSessionFactory引用的数据库是动态数据库dynamicDataSource:
4、事务管理这里要管理的也是上面配置的dynamicDataSource动态数据库:
5、写两个数据源配置类DataSourceContextHolder.java和DynamicDataSource.java来配置数据源,利用ThreadLocal解决线程安全问题。
DataSourceContextHolder 类:
package com.datasource; public class DataSourceContextHolder { private static final ThreadLocalcontextHolder = 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 (原名Titan) 是一个基于JAVA的模块化开发框架,它提供在运行时动态加载模块(一个JAR包)、卸载模块和模块间调用的API。也是阿里巴巴的开源项目之一 https://github.com/alibaba/ja...,目前在微贷事业群广泛使用。...
摘要:也是阿里巴巴的开源项目之一,目前在微贷事业群广泛使用。模块的版本,如果版本号和之前加载的不一致,框架则会重新加载模块。 JarsLink (原名Titan) 是一个基于JAVA的模块化开发框架,它提供在运行时动态加载模块(一个JAR包)、卸载模块和模块间调用的API。也是阿里巴巴的开源项目之一 https://github.com/alibaba/ja...,目前在微贷事业群广泛使用。...
摘要:也是阿里巴巴的开源项目之一,目前在微贷事业群广泛使用。模块的版本,如果版本号和之前加载的不一致,框架则会重新加载模块。 JarsLink (原名Titan) 是一个基于JAVA的模块化开发框架,它提供在运行时动态加载模块(一个JAR包)、卸载模块和模块间调用的API。也是阿里巴巴的开源项目之一 https://github.com/alibaba/ja...,目前在微贷事业群广泛使用。...
阅读 617·2023-04-25 18:37
阅读 2779·2021-10-12 10:12
阅读 8312·2021-09-22 15:07
阅读 563·2019-08-30 15:55
阅读 3173·2019-08-30 15:44
阅读 2194·2019-08-30 15:44
阅读 1624·2019-08-30 13:03
阅读 1560·2019-08-30 12:55