人人都是程序员,希望在零碎的阅读时间里,给您一些技术提升。
1 读写分离及多数据源
在我们开发的大多数业务中,往往读多写少,数据库的读会首先变成数据库使用的瓶颈。此时,我们必须能够提升数据库的读性能。
一般写1万条数据的时间比读1万条的数据时间大很多。读写锁冲突从会限制数据库读的性能,读写分离来保证数据使用性能。用一句话概括,读写分离可以很好地解决数据库的读性能瓶颈的。一般都是一个主服务器负责写入,多个从服务器负责查询。
读写分离的关键是一个项目同时访问多个数据源,也就是可以将数据存储的不同服务器的不同数据库上。下面介绍spring boot+mybat-plus如何配置多个数据源,并实现数据操作测试。
2 项目配置
不多说,项目代码直接搞起来。先创建一个集成了mybatis-plus的spring boot的项目,关于如何创建,及mybatis-plus的更多使用,请关注小编其他的文章。
先在pom.xml导入项目依赖,如下图。
需要注意的是,这里用了druid和aop两个依赖。
然后在配置文件配置主从数据源,实际项目可以让master用来写,slave用来读。
3 数据源配置
创建一个multiple包,新建DataSourceContextHolder类,配置数据源的上下文,如下图。
在同包下创建MultipleDataSource类,继承AbstractRoutingDataSource,如下图。
再创建一个config包,添加druid配置文件类,如下图。这里请注意,在pom.xml引入druid的版本必须是1.1.9,否则会出错。
创建数据源枚举,如下图。
创建数据源注解,用于设置接口所用哪个数据源。创建一个annotation包,包下创建注解接口,如下图。
对数据源选择进行切面处理,创建AOP,在数据源切换时进行日志输出。
最后的配置,在config包下,创建MyBatiesPlusConfiguration,进行如下配置。
4 创建实体类,dao层,service层
在entity包下创建一个Goods实体类,添加@Data注解;在mapper包下创建GoodsMapper接口,添加@Mapper注解;在service包下创建GoodServcie注解,添加@Service注解,在service里面分别创建两对添加商品和查询商品的接口,分别加上@DataSource注解,分别对应DataSourceEnum.db1和DataSourceEnum.db2的数据源注解,分别对两个不同的数据源进行操作。
5 测试效果
在测试用例添加一个测试方法,分别给db1,db2插入一条商品数据,然后在分别将两个不同的数据库数据查询出来。测试项目是否正常切换表操作两个数据库的数据。
通过测试。
6 结束语
人人都是程序员,感谢您的阅读,欢迎关注。
领取专属 10元无门槛券
私享最新 技术干货