转载

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

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

Mybatis:

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

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

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

2.1 先创建DruidDataSource 实例,里面配置对应的两个数据源:
复制代码
Springboot+mybtais/plus的多数据源实战
2.2 MyBatis配置:这里需要配置两个Bean,所以两个数据源分两个类配置:
复制代码
Springboot+mybtais/plus的多数据源实战

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

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

注意:两个数据源要能定位到各自的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与项目的路径不一致导致的,具体看情况吧,注意一下就行,问题不大)

项目的整体结构如下:

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

此时数据库1的数据为

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

数据库2的数据为:

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

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

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

得到结果:

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。
Springboot+mybtais/plus的多数据源实战

2.配置数据源

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

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

配置数据源格式

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

官网是:

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

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

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

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

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

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

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

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

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

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

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

xbUsers1 = [User(name=张三, age=21)]

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

原文  https://juejin.im/post/5e1ab7156fb9a02fbf37a4d8
正文到此结束
Loading...