springboot 集成mybatis_Spring Boot 集成Mybatis实现多数据源
![](/assets/blank.gif)
静态的方式
我们以两套配置方式为例,在项目中有两套配置文件,两套mapper,两套SqlSessionFactory,各自处理各自的业务,这个两套mapper都可以进行增删改查的操作,在这两个主MYSQL后也可以各自配置自己的slave,实现数据的备份。如果在增加一个数据源就得从头到尾的增加一遍。
先看看两个配置文件:
## master 数据源配置master1.datasource.url=jdbc:mysql://localhost:3306/learn?useUnicode=true&characterEncoding=utf8master1.datasource.username=rootmaster1.datasource.password=master1.datasource.driverClassName=com.mysql.jdbc.Driver## slave 数据源配置master2.datasource.url=jdbc:mysql://localhost:3308/learn?useUnicode=true&characterEncoding=utf8master2.datasource.username=rootmaster2.datasource.password=master2.datasource.driverClassName=com.mysql.jdbc.Driver
这两个数据源的配置不分主从,看网上很多这种配置方式,说是主从配置,个人认为既然什么都是两套就没有必要分出主从,分出读写了,根据业务的需求以及数据库服务器的性能进行划分即可。
两个配置类:
@Configuration// 扫描 Mapper 接口并容器管理@MapperScan(basePackages = Master1DataSourceConfig.PACKAGE, sqlSessionFactoryRef = "master1SqlSessionFactory")public class Master1DataSourceConfig { // 精确到 master 目录,以便跟其他数据源隔离 static final String PACKAGE = "com.hui.readwrite.mapper.master1"; static final String MAPPER_LOCATION = "classpath:mapper/master1.xml"; @Value("${master1.datasource.url}") private String url; @Value("${master1.datasource.username}") private String user; @Value("${master1.datasource.password}") private String password; @Value("${master1.datasource.driverClassName}") private String driverClass; @Bean(name = "master1DataSource") @Primary public DataSource masterDataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(driverClass); dataSource.setUrl(url); dataSource.setUsername(user); dataSource.setPassword(password); return dataSource; } @Bean(name = "master1TransactionManager") @Primary public DataSourceTransactionManager masterTransactionManager() { return new DataSourceTransactionManager(masterDataSource()); } @Bean(name = "master1SqlSessionFactory") @Primary public SqlSessionFactory masterSqlSessionFactory(@Qualifier("master1DataSource") DataSource masterDataSource) throws Exception { final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(masterDataSource); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources(Master1DataSourceConfig.MAPPER_LOCATION)); return sessionFactory.getObject(); }}
@Configuration// 扫描 Mapper 接口并容器管理@MapperScan(basePackages = Master2DataSourceConfig.PACKAGE, sqlSessionFactoryRef = "master2SqlSessionFactory")public class Master2DataSourceConfig { // 精确到 master 目录,以便跟其他数据源隔离 static final String PACKAGE = "com.hui.readwrite.mapper.master2"; static final String MAPPER_LOCATION = "classpath:mapper/master2.xml"; @Value("${master2.datasource.url}") private String url; @Value("${master2.datasource.username}") private String user; @Value("${master2.datasource.password}") private String password; @Value("${master2.datasource.driverClassName}") private String driverClass; @Bean(name = "master2DataSource") public DataSource master2DataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(driverClass); dataSource.setUrl(url); dataSource.setUsername(user); dataSource.setPassword(password); return dataSource; } @Bean(name = "master2TransactionManager") public DataSourceTransactionManager master2TransactionManager() { return new DataSourceTransactionManager(master2DataSource()); } @Bean(name = "master2SqlSessionFactory") public SqlSessionFactory clusterSqlSessionFactory(@Qualifier("master2DataSource") DataSource master2DataSource) throws Exception { final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(master2DataSource); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources(Master2DataSourceConfig.MAPPER_LOCATION)); return sessionFactory.getObject(); }}
@Primary 标志这个 Bean 如果在多个同类 Bean 候选时,该 Bean 优先被考虑。「多数据源配置的时候注意,必须要有一个主数据源,用 @Primary 标志该 Bean」
@MapperScan 扫描 Mapper 接口并容器管理,包路径精确到 master,为了和下面 cluster 数据源做到精确区分
@Value 获取全局配置文件 application.properties 的 kv 配置,并自动装配
sqlSessionFactoryRef 表示定义了 key ,表示一个唯一 SqlSessionFactory 实例
两个mapper接口的路径和xml文件的路径如下:
![](/assets/blank.gif)
这样就可以实现同一个项目使用多个数据配置,缺点是不易维护和扩展。
动态方式
这种方式实现了一个写库多个读库,使用的是同一套Mapper接口和XML文件,这样就有很好的拓展性,具体代码如下:
先是生成不同的数据源,其中多个读数据源合并
@Configurationpublic class DataBaseConfiguration{ @Value("${spring.datasource.type}") private Class extends DataSource> dataSourceType; @Bean(name="writeDataSource
springboot 集成mybatis_Spring Boot 集成Mybatis实现多数据源相关推荐
- idea创建springboot项目+mybatis_Spring Boot + MyBatis 多模块项目搭建教程
Java后端,选择"" 优质文章,及时送达 作者 | 枫本非凡 链接 | cnblogs.com/orzlin/p/9717399.html 上篇 | IDEA 远程一键部署 Sp ...
- spring c3p0 mysql_spring boot整合mybatis使用c3p0数据源连接mysql
刚刚接触springboot,对很多东西都不熟悉,例如,它的注解方式,他的配置方式等:听说它很牛逼,所以就尝试着去学习.在基本熟悉springboot的第一个程序之后.想到当时spring整合myba ...
- 【spring boot】 mybatis配置双数据源/多数据源
前言 spring boot 2.0.0.RELEASE maven 3.5 eclipse 4.9.0 mybatis 1.3.2 mybatis generator 1.3.2 pagehelpe ...
- Spring Boot 整合 MyBatis Plus实现多数据源的两种方式
第一种:使用配置类的方式: 项目结构 xml依赖: <?xml version="1.0" encoding="UTF-8"?> <proje ...
- Spring Boot 集成MyBatis
Spring Boot 集成MyBatis Spring Boot 系列 Spring Boot 入门 Spring Boot 属性配置和使用 Spring Boot 集成MyBatis Spring ...
- ideal新建springboot工程_MyBatis初级实战之一:Spring Boot集成
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Spring Boot 集成 Mybatis 实现双数据源
转载自 Spring Boot 集成 Mybatis 实现双数据源 这里用到了Spring Boot + Mybatis + DynamicDataSource配置动态双数据源,可以动态切换数据源 ...
- spring boot集成mybatis+事务控制
一下代码为DEMO演示,采用注解的方式完成Spring boot和Mybatis的集成,并进行事物的控制 数据源的配置: 1 spring.datasource.url=jdbc:mysql://lo ...
- springboot dubbo引入包_spring boot 集成 dubbo 企业完整版
一.什么是Spring Boot ? 现阶段的 Spring Boot 可谓是太火了,为什么呢?因为使用方便.配置简洁.上手快速,那么它是什么?从官网上我们可以看到,它是 Spring 开源组织下的一 ...
最新文章
- Flex AdvancedDataGrid 数据展示异常
- 鸿蒙之境的称号,《神都夜行录》鸿蒙之境80级古都凶煞打法
- boost::mpl模块实现lower_bound相关的测试程序
- ACM练习 校赛83C:纸片儿(测试用例通过但WA/TLE)
- Windows下安装及使用NVM
- 关于计算Java程序运行时间
- unity已存在,您无法加载相同的版本
- c# 调用webservice未能连接到服务器连接不上报登录失败,C#动态调用webService出现 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。...
- 在计算机图形学中多边形的表示方法通常有,计算机图形学复习大纲
- FCP-报表交付工程师考试经验
- TFS映射关系出错的几种
- Python爬虫 requests使用post请求分析并登录Chinaunix
- githug通关部分黏贴(git代码练习)
- C++中的delegate
- APP流量变现之穿山甲广告平台接入
- C++中的泛型编程有函数模板与类模板
- cookie获取和钓鱼攻击演示
- 【全文】工信部正式发布《公共互联网网络安全突发事件应急预案》
- 办理佛山入户对于不同的人都会有什么条件
- mysql安装后没有mysql数据库怎么处理
热门文章
- UVALive 4794 Sharing Chocolate DP
- 关于日历的一个超级存储过程
- leetcode 1217 python
- matlab循环遍历数组_MatLab简易教程 #8 循环
- python调用脚本_3种python调用其他脚本的方法
- 荐书送书丨《PostgreSQL实战》、《PostgreSQL修炼之道:从小工到专家(第2版)》...
- 基于Prometheus+Grafana监控SQL Server数据库
- 直播预告:WLS/WAS故障基本分析介绍
- HDFS源码解析:教你用HDFS客户端写数据
- 带你熟悉鸿蒙轻内核Kconfig使用指南