SpringBoot MybatisPlus Druid 多数据源项目
写在前面:本文主要介绍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 多数据源项目相关推荐
- 基于Springboot+Mybatisplus+Vue的科研项目管理系统
基于Springboot+Mybatisplus+Vue的科研项目管理系统 1.1 项目概述 开发语言:Java8 数据库:Mysql5 前端技术:bootstrap 后端框架:Springboot ...
- 使用SpringBoot+MybatisPlus框架的后端项目调用SQL Server的存储过程时报错
在使用SpringBoot+MybatisPlus框架的后端项目调用SQL Server的存储过程时报错: Mapper层xml中的代码为: 在命令行调用存储过程时,可以顺利执行,但是在mapper中 ...
- SpringBoot/Mybatis/Druid, 多数据源MultiDataSource配置思路
新的项目需求,需要将子需求A锁定到A库,将子需求B锁定到B库: 就是俗称的"分库":但这是业务性分库,也就是说,A库和B库并没有任何逻辑上的,主从或水平或垂直分库关系:就是,完全没 ...
- 【daisy-framework】SpringBoot+MyBatis+Druid 多数据源
前言 Github:https://github.com/yihonglei/daisy-framework/tree/master/daisy-springboot-framework(daisy工 ...
- Springboot/MybatisPlus动态切换数据源
1.1 简述 最近项目中有动态切换数据源需求,主要是要动态切换数据源进行数据的获取,现将项目中实现思路及代码提供出来,供大家参考.当然切换数据源还有其他的方式比如使用切面的方式,其实大体思路是一样的. ...
- mybatis 配置多数据源 java,SpringBoot+MyBatisPlus配置多数据源读写分离
首先呢,我们这里使用MySQL的数据库,可以简单配置一下主从备份来实现两个数据库的数据同步 项目的配置目录大概是这样的作为参考 第一步.定义一个枚举类声明当前的数据源类型 package com.yu ...
- SpringBoot+MyBatisPlus整合时提示:Invalid bound statement(not found):**.dao.UserDao.queryById
场景 在使用SpringBoot+MyBatisPlus搭建后台启动项目时,使用EasyCode自动生成代码. 在访问后台接口时提示: Invilid bound statement (not fou ...
- SpringBoot--配置Druid(德鲁伊)数据源监控
01: Druid(德鲁伊)数据源简介 02: 使用Druid(德鲁伊)数据源 03: 配置Druid(德鲁伊)数据源监控 1. SpringBoot–配置Druid(德鲁伊)数据源监控 Druid ...
- SpringBoot一站式功能提供框架(一)整合MybatisPlus、整合Swagger Knif4j、整合Druid多数据源--柚子真好吃
SpringBoot一站式功能提供框架(一)整合MybatisPlus.整合Swagger Knif4j.整合Druid多数据源--柚子真好吃 一.前言 二.功能描述 三.具体实现 四.开源地址 一. ...
最新文章
- linux下的SIGINT的作用,signal(SIGINT,stop)的问题,大家进来看下!!!
- 电磁信号检测 | 本是同根生,相煎何太急
- 【opencv】1.opencv安装、编译、运行等踩坑记录
- Android自定义Dialog及与Activity的交互
- 关于UITableView的Cell zhuanzai
- namespace 或The content of element type mapper must match EMPTY
- Android Studio之编译t提示Invoke-customs are only supported starting with Android O (--min-api 26)
- 银行界加强计算机病毒管理,银行计算机管理系统维护现状与对策研究(7.12).doc...
- QT 的基础调试技巧 -- 未完 -- 更新中
- joomla 1.5 笔记
- vue源码学习:Object.defineProperty 对数组监听
- 学习C语言编程必备的入门书籍
- mPaaS 月度小报|魔方卡片(Cube)公测,十个卡片模板任意使用
- 用PS给证件照换底色
- MySQL生成连续数字
- 时事点评-红芯浏览器事件
- 自定义Navigator切换fragment
- Cacti监控mysql数据库服务器实现过程
- Unable to create the django_migrations table 迁移文件时报错
- thumbnailator给图片添加水印
热门文章
- 30个农村创业项目_6个适合百姓的冷门创业项目,乡村乡镇,小本生意却受农村人欢迎...
- 用自己的电脑搭建服务器并让外网访问。
- Linux中三种引号(单引号、双引号、反引号)的区别
- 设计原则与思想:规范和重构(11讲)
- 牧牛火链,区块链技术将会如何发展
- python爬虫表格数据匹配_python,爬取数据做成表格,解放你的双手
- 基于Qt的跨平台应用开发(转)
- ubuntu 安装 魔霸_魔霸之王(King of MOBA)电脑上怎么玩 电脑版模拟器安装方法
- Dmail—基于Web3的首个NFT邮件应用
- Java网络 1.9 超级链接