今天看啥  ›  专栏  ›  思源呀

Springboot+mybtais/plus的多数据源实战

思源呀  · 掘金  ·  · 2020-01-13 03:03
阅读 27

Springboot+mybtais/plus的多数据源实战

随着并发量的不断增加,显然单个数据库已经承受不了高并发带来的压力。一个项目使用多个数据库(无论是主从复制- - 读写分离还是分布式数据库结构)的重要性变得越来越明显。传统项目中(个人对传统项目的理解就是所有的业务模块都在一个tomcat中完成,多个相同的tomcat集群也可认为是传统项目)整合多数据源有两种方法:分包和AOP。 那么,今天我们先来聊一聊第一种,分包
Mybatis:

1.在application.properties文件中配置不同数据源的配置。

2.编写不同数据源的@Configuration,我这边配置了俩个简单的数据源,就拿俩个来举例

2.1 先创建DruidDataSource 实例,里面配置对应的两个数据源:
复制代码

2.2 MyBatis配置:这里需要配置两个Bean,所以两个数据源分两个类配置:
复制代码

依照第一个配置,配置第二个数据源即可,这里需要注意因为操作的是不同的数据源,所以扫描的包是不一样的,不同的Mapper将操作不同的数据源。如下:

注意:两个数据源要能定位到各自的mapper-dao文件和mapper-xml文件。并且能够定位到yaml文件中各自的参数配置

@MapperScan(basePackages = "com.sy.mybatis.mapper1", sqlSessionFactoryRef = "sqlSessionFactory1", sqlSessionTemplateRef = "sqlSessionTemplate1")定位mapper-dao文件,唯一的SqlSessionFactory实例和事务。 bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/wp/**.xml")); 定位mapper-xml文件。 要记得指定扫描包,不然有可能报错:no statement (这种错误也可能是mapper的xml中,namespace与项目的路径不一致导致的,具体看情况吧,注意一下就行,问题不大)

项目的整体结构如下:

此时数据库1的数据为

数据库2的数据为:

去测试类测试我们的配置是否成功:

得到结果:
xbUsers1 = [XbUsers(name=张三, age=21)]
xbUsers2 = [XbUsers(name=李四, age=22), XbUsers(name=王五, age=23), XbUsers(name=赵六, age=24)]

mybatisPlus: mybatisPlus的配置就比较简单了,官网有文档说明,我这边就拿来整合了一下

  1. 引入dynamic-datasource-spring-boot-starter。

2.配置数据源

这边我使用的是druid,为了某些版本的springboot @SpringBootApplication(exclude= {DataSourceAutoConfiguration.class}) 无法生效,手给他去除了自动配置

配置数据源格式

官网是:

强烈建议在 主从模式 下遵循普遍的规则,以便他人能更轻易理解你的代码。

主数据库 建议 只执行 INSERT UPDATE DELETE 操作。

从数据库 建议 只执行 SELECT 操作。

3.使用 @DS 切换数据源。 @DS 可以注解在方法上和类上,同时存在方法注解优先于类上注解。

注解在service实现或mapper接口方法上,但强烈不建议同时在service和mapper注解。 (可能会有问题)

我这边简单的就在接口上写sql来验证了

配置完成了,看下项目结构

因为数据库和上面的一样,我们直接来运行看下结果

xbUsers1 = [User(name=张三, age=21)]
xbUsers2 = [User(name=李四, age=22), User(name=王五, age=23), User(name=赵六, age=24)]




原文地址:访问原文地址
快照地址: 访问文章快照