怎么在springboot中使用mybatis实现动态切换数据源
这期内容当中小编将会给大家带来有关怎么在spring boot中使用mybatis实现动态切换数据源,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

创新互联建站坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站制作、网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的新和网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
1.加个依赖
org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.1
2.application.properties配置文件
#主从数据库 master.db.driverClassName=com.MySQL.jdbc.Driver master.db.url=jdbc:mysql://localhost:3306/cbd?characterEncoding=UTF-8&useUnicode=true&useSSL=false master.db.username=root master.db.password=admin slave.db.driverClassName=com.mysql.jdbc.Driver slave.db.url=jdbc:mysql://localhost:3306/cbd_test?characterEncoding=UTF-8&useUnicode=true&useSSL=false slave.db.username=root slave.db.password=admin mybatis.config-location= classpath:config/mybatis-config.xml mybatis.mapper-locations=classpath:mapper/**/*.xml
3.禁用springboot默认加载数据源配置
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}4.数据源配置类
/**
* 主数据源
*/
@Configuration
@ConfigurationProperties(prefix = "master.db")
public class MasterDataSourceConfig {
private String url;
private String username;
private String password;
private String driverClassName;
}/**
* 从数据源配置
*/
@Configuration
@ConfigurationProperties(prefix = "slave.db")
public class SlaveDataSourceConfig {
private String url;
private String username;
private String password;
private String driverClassName;
}/**
* 数据源配置类
*/
@Configuration
public class DataSourceComponent {
@Resource
private MasterDataSourceConfig masterDataSourceConfig;
@Resource
private SlaveDataSourceConfig slaveDataSourceConfig;
@Bean(name = "master")
public DataSource masterDataSource() {
DataSource dataSource = new DataSource();
dataSource.setUrl(masterDataSourceConfig.getUrl());
dataSource.setUsername(masterDataSourceConfig.getUsername());
dataSource.setPassword(masterDataSourceConfig.getPassword());
dataSource.setDriverClassName(masterDataSourceConfig.getDriverClassName());
return dataSource;
}
@Bean(name = "slave")
public DataSource slaveDataSource() {
DataSource dataSource = new DataSource();
dataSource.setUrl(slaveDataSourceConfig.getUrl());
dataSource.setUsername(slaveDataSourceConfig.getUsername());
dataSource.setPassword(slaveDataSourceConfig.getPassword());
dataSource.setDriverClassName(slaveDataSourceConfig.getDriverClassName());
return dataSource;
}
@Primary//不加这个会报错。
@Bean(name = "multiDataSource")
public MultiRouteDataSource exampleRouteDataSource() {
MultiRouteDataSource multiDataSource = new MultiRouteDataSource();
Map5.数据源上下文
/**
* 数据源上下文
*/
public class DataSourceContext {
private static final ThreadLocal contextHolder = new ThreadLocal<>();
public static void setDataSource(String value) {
contextHolder.set(value);
}
public static String getDataSource() {
return contextHolder.get();
}
public static void clearDataSource() {
contextHolder.remove();
}
} 6.DataSource路由类
/*
* 重写的函数决定了最后选择的DataSource
*/
public class MultiRouteDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
//通过绑定线程的数据源上下文实现多数据源的动态切换,有兴趣的可以去查阅资料或源码
return DataSourceContext.getDataSource();
}
}7.使用,修改上下文中的数据源就可以切换自己想要使用的数据源了。
public UserVO findUser(String username) {
DataSourceContext.setDataSource("slave");
UserVO userVO = userMapper.findByVO(username);
System.out.println(userVO.getName()+"=====================");
return null;
}上述就是小编为大家分享的怎么在spring boot中使用mybatis实现动态切换数据源了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。
当前名称:怎么在springboot中使用mybatis实现动态切换数据源
本文来源:http://www.jxruijie.cn/article/gegshi.html
