本篇文章为大家展示了使用spring怎么实现动态切换,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
创新互联是一家专注于成都网站建设、做网站与策划设计,永安网站建设哪家好?创新互联做网站,专注于网站建设10余年,网设计领域的专业建站公司;建站业务涵盖:永安等地区。永安做网站价格咨询:18980820575
targetDataSources 就是我们的多个数据源,在初始化的时候会调用afterPropertiesSet(),去解析我们的数据源 然后 put 到 resolvedDataSources
实现了 DataSource 的 getConnection(); 我们看看 determineTargetDataSource(); 做了什么
通过下面的 determineCurrentLookupKey();(这个方法需要我们实现) 返回一个key,然后从 resolvedDataSources (其实也就是 targetDataSources) 中 get 一个数据源,实现了每次调用 getConnection(); 打开连接 切换数据源,如果想动态添加的话 只需要重新 set targetDataSources 再调用 afterPropertiesSet() 即可
Talk is cheap. Show me the code
我使用的springboot版本为 1.5.x,下面是核心代码
完整代码:https://gitee.com/yintianwen7/spring-dynamic-datasource (本地下载)
/**
* 多数据源配置
*
* @author Taven
*
*/
@Configuration
@MapperScan("com.gitee.taven.mapper")
public class DataSourceConfigurer {
/**
* DataSource 自动配置并注册
*
* @return data source
*/
@Bean("db0")
@Primary
@ConfigurationProperties(prefix = "datasource.db0")
public DataSource dataSource0() {
return DruidDataSourceBuilder.create().build();
}
/**
* DataSource 自动配置并注册
*
* @return data source
*/
@Bean("db1")
@ConfigurationProperties(prefix = "datasource.db1")
public DataSource dataSource1() {
return DruidDataSourceBuilder.create().build();
}
/**
* 注册动态数据源
*
* @return
*/
@Bean("dynamicDataSource")
public DataSource dynamicDataSource() {
DynamicRoutingDataSource dynamicRoutingDataSource = new DynamicRoutingDataSource();
Map
通过 ThreadLocal 获取线程安全的数据源 key
package com.gitee.taven.config;
public class DynamicDataSourceContextHolder {
private static final ThreadLocal contextHolder = new ThreadLocal() {
@Override
protected String initialValue() {
return "dynamic_db0";
}
};
/**
* To switch DataSource
*
* @param key the key
*/
public static void setDataSourceKey(String key) {
contextHolder.set(key);
}
/**
* Get current DataSource
*
* @return data source key
*/
public static String getDataSourceKey() {
return contextHolder.get();
}
/**
* To set DataSource as default
*/
public static void clearDataSourceKey() {
contextHolder.remove();
}
}
动态 添加、切换数据源
/**
* 动态数据源
*
* @author Taven
*
*/
public class DynamicRoutingDataSource extends AbstractRoutingDataSource {
private final Logger logger = LoggerFactory.getLogger(getClass());
private static Map
上述内容就是使用spring怎么实现动态切换,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。
名称栏目:使用spring怎么实现动态切换
文章起源:
http://shouzuofang.com/article/ihjsed.html