有一个这样子的需求,线上正在跑的业务,由于业务发展需要,需重新开发一套新系统,等新系统开发完成后,需要无缝对接切换,当初具体设计见草图。

添加依赖#

        <!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.16</version><!--scope=provided,说明它是在编译阶段生效,不需要打入包中,Lombok在编译期将带Lombok注解的Java文件正确编译为完整的Class文件--><scope>provided</scope></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--mybatis plus和spring boot整合--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.0</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version></dependency>

application.properties#

server.port=9999
spring.datasource.master.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.master.url=jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.master.username=root
spring.datasource.master.password=rootspring.datasource.slave.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.slave.jdbc-url=jdbc:mysql://127.0.0.1/test2?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.slave.username=root
spring.datasource.slave.password=root

2种方式创建DataSource#

Master配置,使用druid连接池#

import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.env.Environment;import javax.sql.DataSource;/*** @Author:chenyanbin*/
@Configuration
@MapperScan(basePackages = "com.example.demo.mapper", sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {@Autowiredprivate Environment env;@Primary@Bean(name = "masterDataSource")
//    @ConfigurationProperties("spring.datasource.master")public DataSource masterDataSource() {
//        return DataSourceBuilder.create().build();DruidDataSource dataSource = new DruidDataSource();dataSource.setUrl(env.getProperty("spring.datasource.master.url"));dataSource.setUsername(env.getProperty("spring.datasource.master.username"));dataSource.setPassword(env.getProperty("spring.datasource.master.password"));dataSource.setDriverClassName(env.getProperty("spring.datasource.master.driver-class-name"));//配置初始化大小、最小、最大dataSource.setMinIdle(10);//配置初始化大小、最小、最大dataSource.setMaxActive(200);//配置初始化大小、最小、最大dataSource.setInitialSize(10);//配置获取连接等待超时的时间dataSource.setMaxWait(60000);//配置一个连接在池中最小生存的时间,单位是毫秒dataSource.setMinEvictableIdleTimeMillis(300000);//配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒dataSource.setTimeBetweenEvictionRunsMillis(60000);//默认的testWhileIdle=true,testOnBorrow=false,testOnReturn=falsedataSource.setValidationQuery("SELECT 1");//申请连接时执行validationQuery检测连接是否有效dataSource.setTestOnBorrow(false);//建议配置为true,不影响性能,并且保证安全性。dataSource.setTestWhileIdle(true);//是否缓存preparedStatement,也就是PSCachedataSource.setPoolPreparedStatements(false);return dataSource;}@Bean(name = "masterSqlSessionFactory")public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();sessionFactoryBean.setDataSource(dataSource);return sessionFactoryBean.getObject();}
}

Slave配置#

import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.sql.DataSource;/*** @Author:chenyanbin*/
@Configuration
@MapperScan(basePackages = "com.example.demo.mapper2",sqlSessionFactoryRef = "slaveSqlSessionFactory")
public class SlaveDataSourceConfig {@Bean(name = "slaveDataSource")@ConfigurationProperties("spring.datasource.slave")public DataSource slaveDataSource(){return DataSourceBuilder.create().build();}@Bean(name = "slaveSqlSessionFactory")public SqlSessionFactory sqlSessionFactory(@Qualifier("slaveDataSource") DataSource dataSource) throws Exception {MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();sessionFactoryBean.setDataSource(dataSource);return sessionFactoryBean.getObject();}
}

注意#

  master和slave扫描不同的mapper包路径!!!!!!

  如果需要指定.xml文件,需这样配置!!!

    @Bean(name = "masterSqlSessionFactory")public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();sessionFactoryBean.setDataSource(dataSource);sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/**/*.xml"));return sessionFactoryBean.getObject();}

启动类#

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, MybatisPlusAutoConfiguration.class}
)

启动类上排查,自动装配,使用我们自定义的多数据源!!!

演示#

  多个数据源,同时也是支持事务的

原文链接:https://www.cnblogs.com/chenyanbin/p/15504125.html

作者:陈彦斌

如果觉得本文对你有帮助,可以关注一下我公众号,回复关键字【面试】即可得到一份Java核心知识点整理与一份面试大礼包!另有更多技术干货文章以及相关资料共享,大家一起学习进步!

这才是SpirngBoot轻松整合MybatisPlus多数据源的正确打开方式相关推荐

  1. 【程序员归家计划】放假回家之前拜服务器?不存在的,这才是保证程序员过好年的正确打开方式...

    又到了一年中可以名正言顺地"偷懒"的时候了,此时的正常情况是大家应该收一收努力工作和好好学习的心,准备过年了!这个阶段几乎所有的问题都可以用"过完年再说吧"和& ...

  2. 放假回家之前拜服务器?不存在的,这才是保证程序员过好年的正确打开方式!

    又到了一年中可以名正言顺地"偷懒"的时候了,此时的正常情况是大家应该收一收努力工作和好好学习的心,准备过年了!这个阶段几乎所有的问题都可以用"过完年再说吧"和& ...

  3. 【程序员归家计划】放假回家之前拜服务器?不存在的,这才是保证程序员过好年的正确打开方式

    摘要: 在即将到来的214情人节和举国同庆的农历春节期间,运维同学们应该如何才能不被公司召回,如何才能保证系统的正常运转?本文就为大家整理了自动化运维.架构升级以及安全保障的相关干货合集,希望能够帮助 ...

  4. 彭于晏牵手英得尔T20,这才是品质自驾游正确打开方式

    国家旅游局数据中心数据显示,2018年春节期间,全国共接待游客3.86亿人次,同比增长12.1%,旅游收入达到4750亿元,同比增长12.6%.而在活跃的旅游市场中,自驾游占比接近85%,成为国内家庭 ...

  5. 拜托!这才是分布式系统CAP的正确打开方式!

    "纸面"上的CAP 相信很多同学都听过CAP这个理论,为了避免我们认知不同,我们先来统一下知识起点. CAP理论在1999年一经提出就成为了分布式系统领域的顶级教义.并表明分布式服 ...

  6. 为什么说vivo S7才是5G轻薄旗舰的正确打开方式

    8月3日,vivo发布了最新的5G旗舰机型S7.S7 170g的整机重量和7.39mm的机身厚度,瞬间让其成为年轻用户追捧的热点. 一.厚重的5G手机 众所周知,5G手机由于在信号处理的技术要求上比4 ...

  7. 这才是目前百度统计接口的正确打开方式20180322

    这才是目前百度统计接口的正确打开方式20180322 关于百度统计接口的说明 1.登陆接口网站找到的有2种方式 第一种调用(不能用) https://api.baidu.com/sem/common/ ...

  8. SpringBoot2.0整合Mybatis-Plus多数据源

    文章目录 一.pom依赖 二.application.yml多数据源配置 三.持久层 3.1. UserMapper 接口 3.2. 接口映射UserMapper.xml(可以不写) 四.逻辑处理层 ...

  9. SpringBoot整合MybatisPlus多数据源

    相信在很多使用MybatisPlus框架的小伙伴都会遇到多数据源的配置问题,并且官网也给出了推荐使用多数据源 (dynamic-datasource-spring-boot-starter) 组件来实 ...

最新文章

  1. 另一种的SQL注入和DNS结合的技巧
  2. 脑机接口EEG信号分类算法
  3. css Gradients(渐变)
  4. RestFramework之认证组件
  5. DI 之Spring更多DI的知识
  6. vs2017编写模板类出现以下错误时:没有与参数列表匹配的构造函数……
  7. C++中的面向对象(二)
  8. python基本数据类型——整型,浮点型,复数,字符串
  9. 学习C语言必须掌握的10个经典的C语言小程序
  10. qdialog修改标题栏图标_qt – 如何在QDockWidget标题栏中显示图标?
  11. 【转】基于知识图谱的推荐系统(KGRS)综述
  12. 毒液组学-多组学关联分析大全
  13. 高阶篇:4.2.5)DFMEA建议措施及后续完备
  14. macbook蓝牙pan未连接_关于 MacBook 的电池问题,你了解多少
  15. 详解安卓Gravity的进制封装
  16. NHibernate学习之旅1——什么是NHibernate
  17. spring和jump区别_jump和leap之间的区别
  18. 单片机数字定时闹钟设计c语言,电子设计 基于51单片机的定时闹钟设计.doc
  19. arm平台linux的ethtool配置,ARM-Linux驱动--DM9000网卡驱动分析(四)
  20. MAC 配置AX88179 USB 3.0 to Gigabit Ethernet网络

热门文章

  1. IE8与IE6和IE7的区别
  2. 小结8:图像分类案例2,GAN、DCGAN
  3. Unity 事件番外篇:事件管理中心(另一种版本)
  4. 海森伯模型的严格对角化方法
  5. 三菱MC-1E驱动的开发
  6. Profinet非周期协议解析
  7. js android 通讯录,js通讯录效果,你见过麽
  8. 移动终端安全-ATF中bl1可信启动源码分析
  9. openlayers学习——10、openlayers监听获取鼠标坐标位置
  10. Kaldi-dnn 学习