1、引入依赖

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!--mybatis起步依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!--mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>

2、配置application.properties中配置多个数据源

#slave dataSource数据源
spring.datasource.slave.driver-class-name =com.mysql.jdbc.Driver
spring.datasource.slave.jdbc-url =jdbc:mysql://localhost:3306/study?useUnicode=true&characterEncoding=utf-8
spring.datasource.slave.username =root
spring.datasource.slave.password =root
#master dataSource数据源
spring.datasource.master.driver-class-name =com.mysql.jdbc.Driver
spring.datasource.master.jdbc-url =jdbc:mysql://localhost:3306/study01?useUnicode=true&characterEncoding=utf-8
spring.datasource.master.username =root
spring.datasource.master.password =root

3、创建多个配置类

数据源1;

@Configuration
@MapperScan(basePackages =DataSourceMaterConfig.PACKAGE,sqlSessionFactoryRef = "masterSqlSessionFactory")
public class DataSourceMaterConfig {
// master dao所在的包
public static final String PACKAGE = "com.yehui.mapper.master";
//配置文件所在目录
//private static final String MAPPER_LOCATION = "classpath:mapper/master/*.xml"; @Bean(name = "mapper/master")
@Primary //默认访问
@ConfigurationProperties(prefix = "spring.datasource.master")
public DataSource msaterDataSource() {
return DataSourceBuilder.create().build();
} // 创建Session
@Bean(name = "masterSqlSessionFactory")
@Primary //默认访问
public SqlSessionFactory sqlSessionFactory() throws Exception {
final SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(msaterDataSource());
/* 使用配置文件是加入
Resource[] mapperLocations = new PathMatchingResourcePatternResolver()
.getResources(DataSourceMaterConfig.MAPPER_LOCATION);
sqlSessionFactoryBean.setMapperLocations(mapperLocations);*/
return sqlSessionFactoryBean.getObject();
} // 数据源事务管理器
@Bean(name = "masterDataSourceTransactionManager")
@Primary //默认访问
public DataSourceTransactionManager masterDataSourceTransactionManager() {
return new DataSourceTransactionManager(msaterDataSource());
}
}

数据源2:

@Configuration
@MapperScan(basePackages =DataSourceSalveConfig.PACKAGE,sqlSessionFactoryRef = "slaveSqlSessionFactory")
public class DataSourceSalveConfig {
// slave dao所在的包
public static final String PACKAGE = "com.yehui.mapper.slave";
//配置文件所在目录
private static final String MAPPER_LOCATION = "classpath:mapper/slave/*.xml"; @Bean(name = "mapper/slave")
@ConfigurationProperties(prefix = "spring.datasource.slave")
public DataSource slaveDataSource() {
return DataSourceBuilder.create().build();
} // 创建Session
@Bean(name = "slaveSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory() throws Exception {
final SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(slaveDataSource());
/*使用配置文件时加入 Resource[] mapperLocations = new PathMatchingResourcePatternResolver()
.getResources(DataSourceSalveConfig.MAPPER_LOCATION);
sqlSessionFactoryBean.setMapperLocations(mapperLocations);*/
return sqlSessionFactoryBean.getObject();
} // 数据源事务管理器
@Bean(name = "slaveDataSourceTransactionManager")
public DataSourceTransactionManager slaveDataSourceTransactionManager() {
return new DataSourceTransactionManager(slaveDataSource());
}
}

4、创建多个包mapper

数据源1:

package com.yehui.mapper.master;

import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map; public interface MasterMapper { @Select("SELECT * FROM tb_user")
public List<Map<String,Object>> selectList();
}

数据源2:

package com.yehui.mapper.slave;

import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map; public interface SlaveMapper {
@Select("SELECT * FROM tb_user")
public List<Map<String,Object>> selectList();
}

5、创建service类

@Service
public class UserService { @Autowired
private MasterMapper masterMapper; @Autowired
private SlaveMapper savlesMapper; public List<Map<String,Object>> selectList1(){
return masterMapper.selectList();
} public List<Map<String,Object>> selectList2(){
return savlesMapper.selectList();
}
}

6、测试类

@RunWith(SpringRunner.class)
@SpringBootTest
public class DataSourceTest {
@Autowired
private UserService userService;
@Test
public void test1(){
List<Map<String, Object>> mapList = userService.selectList1();
System.out.println(mapList);
}
@Test
public void test2(){
List<Map<String, Object>> mapList = userService.selectList2();
System.out.println(mapList);
}
}

注意配置过程中如果报此错误

No qualifying bean of type 'javax.sql.DataSource' available: more than one 'primary' bean found amon

导致原因@Primary这个注解只能在一个包下存在,不能在其他存在

最新文章

  1. 【Win 10 应用开发】打印UI元素
  2. CSAPP(前言)
  3. JAVA学习Swing绝对局部简单学习
  4. ubuntu 安装cloudera hadoop
  5. hi3531播放1080p60f, 延迟越来越大的问题与解决办法
  6. FITS 基本格式及其扩展
  7. 让用户打开你app的位置功能
  8. 【转】C++的继承与多态:为什么需要虚函数
  9. python运维开发之路第一天
  10. LXC是如何与CGROUP,namespace扯上关系的?再加上DOCKER.IO。完美!!!
  11. Android打包常见错误之Export aborted because fatal lint errors were found
  12. centos7 安装elasticsearch
  13. Java线程池之ThreadPoolExecutor
  14. dataTable使用方法
  15. 百度地图坐标偏移,微信小程序地图偏移问题,腾讯地图坐标偏移
  16. Linux 小知识翻译 - 「版本号」的命名方式
  17. Java集合(Collection)综述
  18. Vue 动态图片加载路径问题和解决方法
  19. 转:eclipse里面显示中文乱码
  20. codeforces 1000F One Occurrence(线段树、想法)

热门文章

  1. spring-data-mongodb
  2. 菜鸟学Linux - bash的配置文件
  3. 13,scrapy框架的日志等级和请求传参
  4. Django补充知识点——用户管理
  5. IOS开发---菜鸟学习之路--(七)-自定义UITableViewCell
  6. Halcon17 Linux 下载
  7. linux常用命令(复制)
  8. 浅谈后缀自动机SAM
  9. windows系统——U 盘损坏修复
  10. bzoj2338数矩形(rectangle)