SpringBoot Mybatis多数据源配置
参考资料:
- 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中的两个数据库,myblog
和pythonblog
二. 多数据源配置类
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多数据源配置相关推荐
- springboot+mybatis多数据源配置
目录 1.前言 2.多数据源配置 2.1 AbstractRoutingDataSource 2.2.首先maven依赖 2.3 数据源配置 2.4 mybatis配置 2.5 设置数据源的路由ke ...
- SpringBoot mybatis多数据源配置,记录下我磕磕碰碰的三个月找工作经历
*/ public class DynamicDataSource extends AbstractRoutingDataSource { /** 取得当前使用哪个数据源 @return */ @Ov ...
- Springboot整合Mybatis多数据源配置
话不多说,直接进入正题.源码地址:https://github.com/SuriYesl/template.git 目录 一.数据库配置文件 二.配置类 主数据源配置类: 次数据源配置类: 三.项目结 ...
- 探讨 | SpringBoot + MyBatis 多数据源事物问题
这是小小本周的第二篇,本篇将会着重讲解关于SpringBoot + MyBatis 多数据源的事物的问题. 多数据源 此处模拟创建订单和扣减库存.先创建订单表和库存表 CREATE TABLE `t_ ...
- springmvc+mybatis多数据源配置,AOP注解动态切换数据源
springmvc与springboot没多大区别,springboot一个jar包配置几乎包含了所有springmvc,也不需要繁琐的xml配置,springmvc需要配置多种jar包,需要繁琐的x ...
- MyBatis多数据源配置(读写分离)
MyBatis多数据源配置(读写分离) 首先说明,本文的配置使用的最直接的方式,实际用起来可能会很麻烦. 实际应用中可能存在多种结合的情况,你可以理解本文的含义,不要死板的使用. 多数据源的可能情况 ...
- springboot+dynamic多数据源配置
springboot+dynamic多数据源配置 配置 使用 springboot+dynamic多数据源配置 来源:https://mp.baomidou.com/guide/dynamic-dat ...
- springboot中druid数据源配置无效的问题和jar包找不到问题
springboot中druid数据源配置无效的问题 阿里云的仓库 链接: 阿里云仓库. 自己在springboot项目中,引入druid的依赖,希望引入druid数据源. 但是idea中,虽然在这个 ...
- spring mybatis 多数据源配置 jeesite 多数据源配置
spring mybatis 多数据源配置 jeesite 多数据源配置 一.情景描述 在系统数据达到一定的访问量时,遇到单个数据库瓶颈,所以需要扩展数据库,启用第二个数据源资源,项目架构变成 一个服 ...
最新文章
- C++ Error: no appropriate default constructor available
- 请求https错误: unable to find valid certification
- Js选择器方法汇总之Salesforce常用
- 主模式和野蛮模式_网络野蛮行为的含混性和观念
- cucumber测试_如何在Cucumber中进行后端测试
- Oracle Service Bus简介
- Python基础小结
- 离散数学之集合论【中】
- 读《编程珠玑》 (四)
- php选择nginx还是apache,浅谈apache和nginx的rewrite的区别
- Atitit 知识管理 知识体系专业分类介绍
- MIUI刷Android原生,小米手机怎么刷安卓原生系统
- “24岁,一门手艺,年入百万”:真正厉害的人,都做到了这4件事
- Goldendict 及其词典详述
- 性能测试培训总结-spotlight on mysql
- APICloud入门
- Android 实践:做一款新闻 APP
- 爬虫day3,通过爬虫有道翻译实现汉译英
- 借“核高基”东风 打造国产数据库第一品牌
- rdp(远程桌面协议)配置