写在前面:本文主要介绍SpringBoot MybatisPlus和Druid这些组件下,如何创建多数据源(DataSource)的web项目。写这篇博客的原因就是我在搜索同类型的问题的时候,其他人写的博客非常不清晰,完全无法按照介绍的步骤来实现。我希望我写的这篇博客可以真的替看这篇博客的人能解决这类问题。如果你看完之后还是没有解决可以评论留言,甚至加我的微信(JB328258)帮你解决。因为我觉得我们中国人写技术博客有的时候太敷衍了,不要把博客当成一个记事本。而是要真正对不管是行业还是同样的从业人员有价值才有意义。

背景: 我们的web项目需要读取两个数据库里面的表的数据,然后就有了这个需求。但是我在网上搜索解决方法,很多人的博客都是写的连接两个数据源,并且还通过AOP动态切换数据源,但是我认为这种使用场景应该是非常非常少的。一般情况下的应用场景都是表的数据在多个库里面。然后web项目需要读多个库的数据进行汇合。

正文:

第一步:引入对于的SpringBoot MybatisPlus Druid的Jar包。这一步不赘述,网上示例很多。

第二步:  填写多个数据源的相关配置,如JDBC的连接地址,JDBC的数据库等。

1. cmdb代表一个数据库。

2. compass代表一个数据库。

spring:datasource:cmdb:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://192.168.60.11:3306/cmdb_docker?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNullusername: YourXXXpassword: YourXXXinitial-size: 0min-idle: 1max-active: 20max-wait: 60000remove-abandoned: trueremove-abandoned-timeout: 180time-between-eviction-runs-millis: 60000min-evictable-idle-time-millis: 300000test-while-idle: truetest-on-borrow: falsetest-on-return: falsefilters: stat,wall,log4j2compass:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://192.168.60.11:3306/compass?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNullusername: YourXXXpassword: YourXXXinitial-size: 0min-idle: 1max-active: 20max-wait: 60000remove-abandoned: trueremove-abandoned-timeout: 180time-between-eviction-runs-millis: 60000min-evictable-idle-time-millis: 300000test-while-idle: truetest-on-borrow: falsetest-on-return: falsefilters: stat,wall,log4j2

第三步:创建对应的MybatisPlus的分页插件如下

@Configuration
public class MybatisPlusConfig {/*** 分页插件* @return*/@Beanpublic PaginationInterceptor paginationInterceptor(){PaginationInterceptor page = new PaginationInterceptor();page.setDialectType("mysql");return page;}}

第四步:分别创建两个DataSource对应的Config,注意看下面代码里面的备注,比较重要。

4.1 创建第一个DataSource的Config

//创建Compass数据的DataSource数据源
@Configuration
// basePackages 是扫描的Compass库对应的Mapper
@MapperScan(basePackages = "com.ximalaya.compass.core.mapper",sqlSessionFactoryRef = "compassFactory")
public class CompassDataSourceConfig {@AutowiredPaginationInterceptor paginationInterceptor;@Bean(name="compass")@ConfigurationProperties("spring.datasource.compass")public DataSource createCmdbDataSource(){return new DruidDataSource();}@Bean(name = "compassFactory")public SqlSessionFactory createCompassFactory(@Qualifier("compass") DataSource dataSource) throws Exception {SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();factoryBean.setDataSource(dataSource);//这里是配置Mybatis的ConfigurationMybatisConfiguration configuration = new MybatisConfiguration();configuration.setJdbcTypeForNull(JdbcType.NULL);configuration.setMapUnderscoreToCamelCase(true);configuration.setCacheEnabled(false);factoryBean.setConfiguration(configuration);//这里是添加Mybatis的分页插件factoryBean.setPlugins(new Interceptor[]{paginationInterceptor});//这里是填写Compass这个库对应的Mapper.xml文件factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis-compass/*.xml"));return factoryBean.getObject();}@Bean(name = "compassSqlSessionTemplate")public SqlSessionTemplate createCompassSqlSessionTemplate(@Qualifier("compassFactory") SqlSessionFactory sqlSessionFactory){return new SqlSessionTemplate(sqlSessionFactory);}}

4.2 创建第二个DataSource的Config

@Configuration
@MapperScan(basePackages = "com.ximalaya.compass.collector.mapper",sqlSessionFactoryRef = "cmdbFactory")
public class CmdbDockerDataSourceConfig {@AutowiredPaginationInterceptor paginationInterceptor;@Bean(name="cmdb_docker")@ConfigurationProperties("spring.datasource.cmdb")public DataSource createCmdbDataSource(){return new DruidDataSource();}@Bean(name = "cmdbFactory")public SqlSessionFactory createCmdbFactory(@Qualifier("cmdb_docker") DataSource dataSource) throws Exception {SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();factoryBean.setDataSource(dataSource);MybatisConfiguration configuration = new MybatisConfiguration();configuration.setJdbcTypeForNull(JdbcType.NULL);configuration.setMapUnderscoreToCamelCase(true);configuration.setCacheEnabled(false);factoryBean.setConfiguration(configuration);factoryBean.setPlugins(new Interceptor[]{paginationInterceptor});factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis-cmdb/*.xml"));return factoryBean.getObject();}@Bean(name = "cmdbSqlSessionTemplate")public SqlSessionTemplate createCmdbSqlSessionTemplate(@Qualifier("cmdbFactory") SqlSessionFactory sqlSessionFactory){return new SqlSessionTemplate(sqlSessionFactory);}}

结尾:至此所有的创建和修改都完成,启动SpringBoot项目使用对应的Service就可以访问对应的数据库了。

SpringBoot MybatisPlus Druid 多数据源项目相关推荐

  1. 基于Springboot+Mybatisplus+Vue的科研项目管理系统

    基于Springboot+Mybatisplus+Vue的科研项目管理系统 1.1 项目概述 开发语言:Java8 数据库:Mysql5 前端技术:bootstrap 后端框架:Springboot ...

  2. 使用SpringBoot+MybatisPlus框架的后端项目调用SQL Server的存储过程时报错

    在使用SpringBoot+MybatisPlus框架的后端项目调用SQL Server的存储过程时报错: Mapper层xml中的代码为: 在命令行调用存储过程时,可以顺利执行,但是在mapper中 ...

  3. SpringBoot/Mybatis/Druid, 多数据源MultiDataSource配置思路

    新的项目需求,需要将子需求A锁定到A库,将子需求B锁定到B库: 就是俗称的"分库":但这是业务性分库,也就是说,A库和B库并没有任何逻辑上的,主从或水平或垂直分库关系:就是,完全没 ...

  4. 【daisy-framework】SpringBoot+MyBatis+Druid 多数据源

    前言 Github:https://github.com/yihonglei/daisy-framework/tree/master/daisy-springboot-framework(daisy工 ...

  5. Springboot/MybatisPlus动态切换数据源

    1.1 简述 最近项目中有动态切换数据源需求,主要是要动态切换数据源进行数据的获取,现将项目中实现思路及代码提供出来,供大家参考.当然切换数据源还有其他的方式比如使用切面的方式,其实大体思路是一样的. ...

  6. mybatis 配置多数据源 java,SpringBoot+MyBatisPlus配置多数据源读写分离

    首先呢,我们这里使用MySQL的数据库,可以简单配置一下主从备份来实现两个数据库的数据同步 项目的配置目录大概是这样的作为参考 第一步.定义一个枚举类声明当前的数据源类型 package com.yu ...

  7. SpringBoot+MyBatisPlus整合时提示:Invalid bound statement(not found):**.dao.UserDao.queryById

    场景 在使用SpringBoot+MyBatisPlus搭建后台启动项目时,使用EasyCode自动生成代码. 在访问后台接口时提示: Invilid bound statement (not fou ...

  8. SpringBoot--配置Druid(德鲁伊)数据源监控

    01: Druid(德鲁伊)数据源简介 02: 使用Druid(德鲁伊)数据源 03: 配置Druid(德鲁伊)数据源监控 1. SpringBoot–配置Druid(德鲁伊)数据源监控 Druid ...

  9. SpringBoot一站式功能提供框架(一)整合MybatisPlus、整合Swagger Knif4j、整合Druid多数据源--柚子真好吃

    SpringBoot一站式功能提供框架(一)整合MybatisPlus.整合Swagger Knif4j.整合Druid多数据源--柚子真好吃 一.前言 二.功能描述 三.具体实现 四.开源地址 一. ...

最新文章

  1. linux下的SIGINT的作用,signal(SIGINT,stop)的问题,大家进来看下!!!
  2. 电磁信号检测 | 本是同根生,相煎何太急
  3. 【opencv】1.opencv安装、编译、运行等踩坑记录
  4. Android自定义Dialog及与Activity的交互
  5. 关于UITableView的Cell zhuanzai
  6. namespace 或The content of element type mapper must match EMPTY
  7. Android Studio之编译t提示Invoke-customs are only supported starting with Android O (--min-api 26)
  8. 银行界加强计算机病毒管理,银行计算机管理系统维护现状与对策研究(7.12).doc...
  9. QT 的基础调试技巧 -- 未完 -- 更新中
  10. joomla 1.5 笔记
  11. vue源码学习:Object.defineProperty 对数组监听
  12. 学习C语言编程必备的入门书籍
  13. mPaaS 月度小报|魔方卡片(Cube)公测,十个卡片模板任意使用
  14. 用PS给证件照换底色
  15. MySQL生成连续数字
  16. 时事点评-红芯浏览器事件
  17. 自定义Navigator切换fragment
  18. Cacti监控mysql数据库服务器实现过程
  19. Unable to create the django_migrations table 迁移文件时报错
  20. thumbnailator给图片添加水印

热门文章

  1. 30个农村创业项目_6个适合百姓的冷门创业项目,乡村乡镇,小本生意却受农村人欢迎...
  2. 用自己的电脑搭建服务器并让外网访问。
  3. Linux中三种引号(单引号、双引号、反引号)的区别
  4. 设计原则与思想:规范和重构(11讲)
  5. 牧牛火链,区块链技术将会如何发展
  6. python爬虫表格数据匹配_python,爬取数据做成表格,解放你的双手
  7. 基于Qt的跨平台应用开发(转)
  8. ubuntu 安装 魔霸_魔霸之王(King of MOBA)电脑上怎么玩 电脑版模拟器安装方法
  9. Dmail—基于Web3的首个NFT邮件应用
  10. Java网络 1.9 超级链接