随着并发量的不断增加,显然单个数据库已经承受不了高并发带来的压力。一个项目使用多个数据库(无论是主从复制- - 读写分离还是分布式数据库结构)的重要性变得越来越明显。传统项目中(个人对传统项目的理解就是所有的业务模块都在一个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的配置就比较简单了,官网有文档说明,我这边就拿来整合了一下
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)]