在我们的项目中不免会遇到需要在一个项目中使用多个数据源的问题,像我在得到一个任务将用户的聊天记录进行迁移的时候,就是用到了三个数据源,当时使用的AOP的编程方式根据访问的方法的不同进行动态的切换数据源,觉得性能不太好,先在又新用到了一种使用方式,觉得不错,记录下来。

  介绍一下DEMO项目,使用的spring boot集成mybatis,mybatis查询数据库是基于注解形式查询的,目的查询两个数据库test1和test2的用户信息,并在控制台打印。

  1.pom文件

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-web</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.mybatis.spring.boot</groupId>
  8. <artifactId>mybatis-spring-boot-starter</artifactId>
  9. <version>2.1.1</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>com.alibaba</groupId>
  13. <artifactId>druid-spring-boot-starter</artifactId>
  14. <version>1.1.10</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>mysql</groupId>
  18. <artifactId>mysql-connector-java</artifactId>
  19. <scope>runtime</scope>
  20. <version>5.1.27</version>
  21. </dependency>
  22. <dependency>
  23. <groupId>org.springframework.boot</groupId>
  24. <artifactId>spring-boot-starter-test</artifactId>
  25. <scope>test</scope>
  26. <exclusions>
  27. <exclusion>
  28. <groupId>org.junit.vintage</groupId>
  29. <artifactId>junit-vintage-engine</artifactId>
  30. </exclusion>
  31. </exclusions>
  32. </dependency>
  33. </dependencies>
  34.  
  35. <build>
  36. <resources>
  37. <resource>
  38. <directory>src/main/java</directory>
  39. <includes>
  40. <include>
  41. **/*.xml
  42. </include>
  43. </includes>
  44. </resource>
  45. <resource>
  46. <directory>src/resources</directory>
  47. </resource>
  48. </resources>
  49. <plugins>
  50. <plugin>
  51. <groupId>org.springframework.boot</groupId>
  52. <artifactId>spring-boot-maven-plugin</artifactId>
  53. </plugin>
  54. </plugins>
  55. </build>

  其中添加了alibaba的druid的数据源代替了spring boot默认的hikacp,注意mysql的驱动的版本号要与自己所使用的mysql的版本号保持一致,其中build模块里面的resources里面是为了防止spring boot 过滤掉src/main/java的XML文件,毕竟有的人喜欢mybatsi查询数据库的时候使用的是XML映射文件,不过我们本次使用的 是注解的形式 ,所以<resources>里面的内容在项目中没有用到。如果直接使用注解,可以忽略该内容。

  2.用户类

  1. public class User {
  2. public Integer id;
  3. public String name;
  4. public String address;
  5.  
  6. @Override
  7. public String toString() {
  8. return "User{" +
  9. "id=" + id +
  10. ", name='" + name + '\'' +
  11. ", address='" + address + '\'' +
  12. '}';
  13. }
  14. //get set方法省略...........
  15. }

  用户类没有什么好说的,就是基本的几个属性。

  3.application.properties文件配置

  1. spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSource
  2. spring.datasource.one.username=root
  3. spring.datasource.one.password=123456
  4. spring.datasource.one.url=jdbc:mysql://localhost:3306/test1
  5.  
  6. spring.datasource.two.type=com.alibaba.druid.pool.DruidDataSource
  7. spring.datasource.two.username=root
  8. spring.datasource.two.password=123456
  9. spring.datasource.two.url=jdbc:mysql://localhost:3306/test2

  这里主要配置了两个数据库的访问属性,注意两个的区别为one何two的前缀不同,方便在下面使用spring boot的类安全属性的方式创建不同的数据源。

  4.根据不同的前缀创建不同的数据源

  1. @Configuration
  2. public class DataSourceConfig {
  3. @Bean
  4. @ConfigurationProperties(prefix = "spring.datasource.one")
  5. public DataSource dsOne(){
  6. return DruidDataSourceBuilder.create().build();
  7. }
  8. @Bean
  9. @ConfigurationProperties(prefix = "spring.datasource.two")
  10. public DataSource dsTwo(){
  11. return DruidDataSourceBuilder.create().build();
  12. }
  13. }

  该类位于主目录的config目录下面,使用@ConfigurationProperties注解表明对应的DataSource创建的时候使用的配置文件的内容。

  5.在主目录下面分别创建mapper1和mapper2包,在对应的包下面创建对应的数据层访问接口UserMapper1和UserMapper2,内容都如下所示

  1. @Mapper
  2. public interface UserMapper1 {
  3. @Select("select * from users")
  4. List<User> getAllUser();
  5. }

  这接口里面没有什么好说的就是一个简单的mytatis的基于注解的查询所有用户的接口。

  6.在config包下面创建不同的配置类MybatisConfigOne和MybatisConfigTwo两个类分别对应去扫描mapper1和mapper2两个路径下面的dao层接口。

  1. @Configuration
  2. @MapperScan(basePackages = "com.hopec.mybatis.mapper1",sqlSessionFactoryRef = "sqlSessionFactory1",
  3. sqlSessionTemplateRef = "sqlSessionTemplate1")
  4. public class MybatisConfigOne {
  5. @Autowired
  6. @Qualifier("dsOne")
  7. DataSource ds1;
  8. @Bean
  9. SqlSessionFactory sqlSessionFactory1(){
  10. SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
  11. bean.setDataSource(ds1);
  12. try {
  13. return bean.getObject();
  14. } catch (Exception e) {
  15. e.printStackTrace();
  16. }
  17. return null;
  18. }
  19. @Bean
  20. SqlSessionTemplate sqlSessionTemplate1(){
  21. return new SqlSessionTemplate(sqlSessionFactory1());
  22. }
  23. }
  1. public class MybatisConfigTwo {
  2. @Autowired
  3. @Qualifier("dsTwo")
  4. DataSource ds2;
  5. @Bean
  6. SqlSessionFactory sqlSessionFactory2(){
  7. SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
  8. bean.setDataSource(ds2);
  9. try {
  10. return bean.getObject();
  11. } catch (Exception e) {
  12. e.printStackTrace();
  13. }
  14. return null;
  15. }
  16. @Bean
  17. SqlSessionTemplate sqlSessionTemplate2(){
  18. return new SqlSessionTemplate(sqlSessionFactory2());
  19. }
  20. }

  7.测试

  1. @SpringBootTest
  2. class MybatisApplicationTests {
  3. @Autowired
  4. UserMapper1 userMapper1;
  5. @Autowired
  6. UserMapper2 userMapper2;
  7. @Test
  8. void contextLoads() {
  9. List<User> users = userMapper1.getAllUser();
  10. System.out.println(users);
  11. List<User> allUser = userMapper2.getAllUser();
  12. System.out.println(allUser);
  13.  
  14. }
  15.  
  16. }

  测试结果:

  如果想使用多个数据源,就继续增加就可以了,ok,大功告成了!

spring boot mybatis多多数据源解决方法的更多相关文章

  1. spring boot mybatis 多数据源配置

    package com.xynet.statistics.config.dataresources; import org.springframework.jdbc.datasource.lookup ...

  2. spring boot Mybatis多数据源配置

    关于 有时候,随着业务的发展,项目关联的数据来源会变得越来越复杂,使用的数据库会比较分散,这个时候就会采用多数据源的方式来获取数据.另外,多数据源也有其他好处,例如分布式数据库的读写分离,集成多种数据 ...

  3. Spring Boot + Mybatis 多数据源配置实现读写分离

    本文来自网易云社区 作者:王超 应用场景:项目中有一些报表统计与查询功能,对数据实时性要求不高,因此考虑对报表的统计与查询去操作slave db,减少对master的压力. 根据网上多份资料测试发现总 ...

  4. spring boot项目自定义数据源,mybatisplus分页、逻辑删除无效解决方法

    Spring Boot项目中数据源的配置可以通过两种方式实现: 1.application.yml或者application.properties配置 2.注入DataSource及SqlSessio ...

  5. Spring Boot + Mybatis 实现动态数据源

    动态数据源 在很多具体应用场景的时候,我们需要用到动态数据源的情况,比如多租户的场景,系统登录时需要根据用户信息切换到用户对应的数据库.又比如业务A要访问A数据库,业务B要访问B数据库等,都可以使用动 ...

  6. Spring Boot + Mybatis 配置多数据源

    Spring Boot + Mybatis 配置多数据源 Mybatis拦截器,字段名大写转小写 package com.sgcc.tysj.s.common.mybatis; import java ...

  7. Spring boot Mybatis 整合(完整版)

    个人开源项目 springboot+mybatis+thymeleaf+docker构建的个人站点开源项目(集成了个人主页.个人作品.个人博客) 朋友自制的springboot接口文档组件swagge ...

  8. Spring Boot MyBatis 数据库集群访问实现

    Spring Boot MyBatis 数据库集群访问实现 本示例主要介绍了Spring Boot程序方式实现数据库集群访问,读库轮询方式实现负载均衡.阅读本示例前,建议你有AOP编程基础.mybat ...

  9. spring boot + mybatis + layui + shiro后台权限管理系统

    后台管理系统 版本更新 后续版本更新内容 链接入口: springboot + shiro之登录人数限制.登录判断重定向.session时间设置:https://blog.51cto.com/wyai ...

随机推荐

  1. 转载:elastic5.x部署常见问题总结

    原博文名称:ElasticSearch 5.0.0 安装部署常见错误或问题 原博文地址为:http://www.dajiangtai.com/community/18136.do?origin=csd ...

  2. Windows认证 | Windows本地认证

    Windows的登陆密码是储存在系统本地的SAM文件中的,在登陆Windows的时候,系统会将用户输入的密码与SAM文件中的密码进行对比,如果相同,则认证成功. SAM文件是位于%SystemRoot ...

  3. Python网络爬虫实战(五)批量下载B站收藏夹视频

    我们除了爬取文本信息,有的时候还需要爬媒体信息,比如视频图片音乐等.就拿B站来说,我的收藏夹内的视频可能随时会失效,所以把它们下载到本地是非常保险的一件事. 对于这种大量列表型的数据,可以猜测B站收藏 ...

  4. 数据分析--pandas的基本使用

    一.pandas概述 1.pandas是一个强大的Python数据分析的工具包,是基于NumPy构建的. 2.pandas的主要功能 具备对其功能的数据结构DataFrame.Series 集成时间序 ...

  5. 知名大厂如何搭建大数据平台&架构

    今天我们来看一下淘宝.美团和滴滴的大数据平台,一方面进一步学习大厂大数据平台的架构,另一方面也学习大厂的工程师如何画架构图.通过大厂的这些架构图,你就会发现,不但这些知名大厂的大数据平台设计方案大同小 ...

  6. 使用VirtualBox虚拟机搭建hadoop运行环境,

    最近学了一下大数据,包括hadoop环境的搭建,搭建工具:centos6.5,hadoop2.6.4,eclipse Mars.1 Release (4.5.1),jdk1.8 第一步.网络与ip地址 ...

  7. 有了 CompletableFuture,使得异步编程没有那么难了!

    本文导读: 业务需求场景介绍 技术设计方案思考 Future 设计模式实战 CompletableFuture 模式实战 CompletableFuture 生产建议 CompletableFutur ...

  8. 基于vue-cli3.11.0创建创建vue项目

    如果电脑已安装vue-cli2.9.6,需要先卸载,然后重装vue-cli3.11.0操作如下 等待几分钟,卸载完成,输入npm install -g @vue/cli 等待安装完成,输入vue -V ...

  9. 集合查询表--Map

    查询表 Map接口java提供了一组可以以键值对(key-value)的形式存储数据的数据结构,这种数据结构成为Map.我们可以把Map看成一个多行两列的表格,其中第一列存放key,第二列存放valu ...

  10. e课表项目第二次冲刺周期第七天

    昨天干了什么? 昨天我查找相关的资料实现对之前的信息连接数据库进行显示,完成修改的功能,并且返回到数据库当中.然后下午,我和我们小组的成员,讨论了第二个界面的具体功能和布局,我们一致同意,引用之前的第 ...