springboot中怎么实现动态数据源,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
成都创新互联公司服务项目包括德惠网站建设、德惠网站制作、德惠网页制作以及德惠网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,德惠网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到德惠省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
/**
* 作用:保存一个线程安全的DatabaseType容器
*/
public class DatabaseContextHolder {
private static final ThreadLocal contextHolder = new ThreadLocal<>();
/**
* 当需要操作数据库前,也就是调用mapper.c/r/u/d方法前,可以调用该方法
* 该方法的作用是设置需要连接的数据库
* 由于是线程安全,如果一个新的controller连接请求,在操作数据库前没有显式的调用该方法,则get到的databaseType将会为null
* 但这并不影响数据库的操作,因为在数据源的设置中已经设置了默认的数据源
* 当在同一个线程中(也就是本系统controller的同一个请求处理中),如果该方法被调用过
* 则后面的数据库操作,也就是mapper.c/r/u/d的时,get到的都是set好的数据源,除非再次显式的调用这个set方法改变数据源
*/
public static void setDatabaseType(String type) {
contextHolder.set(type);
}
/**
* 当通过mapper.c/r/u/d方法等操作数据库时
* 该方法会自动被determineCurrentLookupKey方法调用到
* determineCurrentLookupKey是重写了Spring里的AbstractRoutingDataSource类的determineCurrentLookupKey方法
*
* @see DynamicDataSource
*/
public static String getDatabaseType() {
return contextHolder.get();
}
}
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.env.Environment;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;
/**
* 数据源工具类
*/
@Configuration
@Slf4j
public class DataSourceUtil {
@Autowired
private Environment env;
//默认数据源
private DataSource defaultDataSource;
//用户自定义数据源
private Map slaveDataSources = new HashMap<>();
/**
* @see org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource
*/
@Bean
@Primary
public DynamicDataSource dataSource() throws Exception {
initDefaultDataSource();
initSlaveDataSources();
Map
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。
文章名称:springboot中怎么实现动态数据源
地址分享:
http://cdxtjz.cn/article/jdpeps.html