参考资料:

  1. Spring Boot 2.x基础教程:MyBatis的多数据源配置

目录

  • 一. 配置文件
  • 二. 多数据源配置类
  • 三. 多数据源Mybatis配置
    • 3.1 primary数据源配置
    • 3.2 secondary数据源配置
  • 四. 效果

一. 配置文件

spring:datasource:# 数据源1primary:jdbc-url: jdbc:mysql://localhost/myblog?useUnicode=true&characterEncoding=utf-8username: rootpassword: mysqldriver-class-name: com.mysql.cj.jdbc.Driver# 数据源2secondary:jdbc-url: jdbc:mysql://localhost/pythonblog?useUnicode=true&characterEncoding=utf-8username: rootpassword: mysqldriver-class-name: com.mysql.cj.jdbc.Driver

⏹同时连接了Mysql中的两个数据库,myblogpythonblog


二. 多数据源配置类

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 org.springframework.context.annotation.Primary;import javax.sql.DataSource;@Configuration
public class DataSourceConfiguration {// Primary注解是在没有指明使用哪个数据源的时候指定默认使用的主数据源@Primary@Bean("primaryDataSource")@ConfigurationProperties(prefix = "spring.datasource.primary")public DataSource primaryDataSource() {return DataSourceBuilder.create().build();}@Bean("secondaryDataSource")@ConfigurationProperties(prefix = "spring.datasource.secondary")public DataSource secondaryDataSource() {return DataSourceBuilder.create().build();}
}

三. 多数据源Mybatis配置

注意事项:

  • 3.1 primary数据源配置3.2 secondary数据源配置是两种不同的配置方式,都能实现多数据源的效果.此处使用两种不同的方式进行配置,只是为了展示不同的配置方式.
  • sqlSessionFactoryBean.setMapperLocations适用于Mybatis的Mapper接口文件和 .xml文件不在同一个目录下的情况,用于指定 .xml文件 所在的文件路径.
  • @Primary注解用于指定默认的数据源.

3.1 primary数据源配置

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;import javax.annotation.Resource;
import javax.sql.DataSource;@Configuration
@MapperScan(// 指定该数据源扫描指定包下面的Mapper接口文件basePackages = "com.example.jmw.mapper",sqlSessionFactoryRef = "sqlSessionFactoryPrimary",sqlSessionTemplateRef = "sqlSessionTemplatePrimary")
publc class DataSourcePrimaryConfig {// 注入数据源1@Resourceprivate DataSource primaryDataSource;@Bean@Primarypublic SqlSessionFactory sqlSessionFactoryPrimary() throws Exception {SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(primaryDataSource);return sqlSessionFactoryBean.getObject();}@Bean@Primarypublic SqlSessionTemplate sqlSessionTemplatePrimary() throws Exception {return new SqlSessionTemplate(sqlSessionFactoryPrimary());}
}

3.2 secondary数据源配置

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;@Configuration
@MapperScan(basePackages = "com.example.jmw.mapper1",sqlSessionFactoryRef = "sqlSessionFactorySecondary")
public class DataSourceSecondaryConfig {// mapper扫描xml文件的路径private static final String MAPPER_LOCATION = "classpath:mapper1/*.xml";private DataSource secondaryDataSource;// 通过构造方法进行注入public DataSourceSecondaryConfig(@Qualifier("secondaryDataSource") DataSource secondaryDataSource) {this.secondaryDataSource = secondaryDataSource;}@Beanpublic SqlSessionFactory sqlSessionFactorySecondary() throws Exception {SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();// 指定数据源sqlSessionFactoryBean.setDataSource(secondaryDataSource);/*获取xml文件资源对象当Mapper接口所对应的.xml文件与Mapper接口文件分离,存储在 resources 文件夹下的时候,需要手动指定.xml文件所在的路径*/ Resource[] resources = new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION);sqlSessionFactoryBean.setMapperLocations(resources);return sqlSessionFactoryBean.getObject();}@Beanpublic DataSourceTransactionManager SecondaryDataSourceManager() {return new DataSourceTransactionManager(secondaryDataSource);}
}


四. 效果

import com.example.jmw.mapper.I18nMessageMapper;
import com.example.jmw.mapper1.BlogTagMapper;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.annotation.Resource;
import java.util.List;@Controller
@RequestMapping("/test12")
public class Test12Controller {// 数据源1Mapper注入@Resourceprivate I18nMessageMapper i18nMessageMapper;// 数据源2Mapper注入@Resourceprivate BlogTagMapper blogTagMapper;@GetMapping("/selectManyDataSourceData")@ResponseBodypublic void selectManyDataSourceData() {// 查询数据源1中的数据List<I18MessageEnttiy> allLocaleMessage = i18nMessageMapper.getAllLocaleMessage();System.out.println(allLocaleMessage);// 查询数据源2中的数据List<BlogTag> allBlogTag = blogTagMapper.getAllBlogTag();System.out.println(allBlogTag);}
}

SpringBoot Mybatis多数据源配置相关推荐

  1. springboot+mybatis多数据源配置

    目录 1.前言 2.多数据源配置 2.1  AbstractRoutingDataSource 2.2.首先maven依赖 2.3 数据源配置 2.4 mybatis配置 2.5 设置数据源的路由ke ...

  2. SpringBoot mybatis多数据源配置,记录下我磕磕碰碰的三个月找工作经历

    */ public class DynamicDataSource extends AbstractRoutingDataSource { /** 取得当前使用哪个数据源 @return */ @Ov ...

  3. Springboot整合Mybatis多数据源配置

    话不多说,直接进入正题.源码地址:https://github.com/SuriYesl/template.git 目录 一.数据库配置文件 二.配置类 主数据源配置类: 次数据源配置类: 三.项目结 ...

  4. 探讨 | SpringBoot + MyBatis 多数据源事物问题

    这是小小本周的第二篇,本篇将会着重讲解关于SpringBoot + MyBatis 多数据源的事物的问题. 多数据源 此处模拟创建订单和扣减库存.先创建订单表和库存表 CREATE TABLE `t_ ...

  5. springmvc+mybatis多数据源配置,AOP注解动态切换数据源

    springmvc与springboot没多大区别,springboot一个jar包配置几乎包含了所有springmvc,也不需要繁琐的xml配置,springmvc需要配置多种jar包,需要繁琐的x ...

  6. MyBatis多数据源配置(读写分离)

    MyBatis多数据源配置(读写分离) 首先说明,本文的配置使用的最直接的方式,实际用起来可能会很麻烦. 实际应用中可能存在多种结合的情况,你可以理解本文的含义,不要死板的使用. 多数据源的可能情况 ...

  7. springboot+dynamic多数据源配置

    springboot+dynamic多数据源配置 配置 使用 springboot+dynamic多数据源配置 来源:https://mp.baomidou.com/guide/dynamic-dat ...

  8. springboot中druid数据源配置无效的问题和jar包找不到问题

    springboot中druid数据源配置无效的问题 阿里云的仓库 链接: 阿里云仓库. 自己在springboot项目中,引入druid的依赖,希望引入druid数据源. 但是idea中,虽然在这个 ...

  9. spring mybatis 多数据源配置 jeesite 多数据源配置

    spring mybatis 多数据源配置 jeesite 多数据源配置 一.情景描述 在系统数据达到一定的访问量时,遇到单个数据库瓶颈,所以需要扩展数据库,启用第二个数据源资源,项目架构变成 一个服 ...

最新文章

  1. C++ Error: no appropriate default constructor available
  2. 请求https错误: unable to find valid certification
  3. Js选择器方法汇总之Salesforce常用
  4. 主模式和野蛮模式_网络野蛮行为的含混性和观念
  5. cucumber测试_如何在Cucumber中进行后端测试
  6. Oracle Service Bus简介
  7. Python基础小结
  8. 离散数学之集合论【中】
  9. 读《编程珠玑》 (四)
  10. php选择nginx还是apache,浅谈apache和nginx的rewrite的区别
  11. Atitit 知识管理 知识体系专业分类介绍
  12. MIUI刷Android原生,小米手机怎么刷安卓原生系统
  13. “24岁,一门手艺,年入百万”:真正厉害的人,都做到了这4件事
  14. Goldendict 及其词典详述
  15. 性能测试培训总结-spotlight on mysql
  16. APICloud入门
  17. Android 实践:做一款新闻 APP
  18. 爬虫day3,通过爬虫有道翻译实现汉译英
  19. 借“核高基”东风 打造国产数据库第一品牌
  20. rdp(远程桌面协议)配置

热门文章

  1. SAP 委外加工会计分录
  2. Locust入门教程
  3. python的str()字符串类型的方法详解
  4. OGNL表达式的使用方法
  5. 本科3-4万、硕士6万、博士8万!杭州这个区发力引人
  6. UL1017是什么标准?吸尘器UL1017报告
  7. miix4linux双系统,miix4怎么装系统
  8. 云客Drupal源码分析之数据库Schema及创建数据表
  9. STM32 烧录程序后无法在内部FLASH保存数据问题解决
  10. 使用四种框架分别实现百万websocket常连接的服务器{转}