在我们的项目中不免会遇到需要在一个项目中使用多个数据源的问题,像我在得到一个任务将用户的聊天记录进行迁移的时候,就是用到了三个数据源,当时使用的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. python + selenium 环境搭建及问题

    搭建平台windows 准备工具如下: ------------------------------------------------------------- 下载python https://w ...

  2. spring基础学习01

    spring基础 Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用 IOC控制反转 把创建对象和维护对象之间的关系权利 ...

  3. JAVA 8 新特性Stream初体验

    什么是 Stream? Stream(流)是一个来自数据源的元素队列并支持聚合操作 <strong元素队列< strong="">元素是特定类型的对象,形成一个队 ...

  4. .Net Core 商城微服务项目系列(十):使用SkyWalking构建调用链监控(2019-02-13 13:25)

    SkyWalking的安装和简单使用已经在前面一篇介绍过了,本篇我们将在商城中添加SkyWalking构建调用链监控. 顺带一下怎么把ES设置为Windows服务,cd到ES的bin文件夹,运行ela ...

  5. PSSH工具

    目录 PSSH工具 参考 PSSH工具的介绍 PSSH工具的使用 PSSH工具

  6. CSS技巧(1)· CSS渐变 linear-gradient

    前言: 不论在网页设计中,还是传统的媒介中,各种尺寸,颜色,角度的图案在视觉中无处不在,要想在网页中实现复杂的图案,其过程往往不够理想,过去,我们可以创建一个单独的位图文件,然后每次需要做调整的时候, ...

  7. BMap添加海量点数据,BMap.Point携带数据

    在开发web项目的过程中使用到了百度地图,由于要在地图中画出很多点比较影响加载速度,查看官方文档,发现有提供加载海量点的功能BMap.PointCollection,用这个加快速度,但是官方文档中提供 ...

  8. Spark 学习笔记之 aggregateByKey

    aggregateByKey: import org.apache.spark.SparkContext import org.apache.spark.rdd.RDD import org.apac ...

  9. tensorflow中添加L2正则化损失

    方法有几种,总结一下方便后面使用. 1. tensorflow自动维护一个tf.GraphKeys.WEIGHTS集合,手动在集合里面添加(tf.add_to_collection())想要进行正则化 ...

  10. 移动端的<meta>标签

    <head> <meta charset="UTF-8" /> <!-- 页面关键词 --> <meta name="keywo ...