博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java多数据源自动切花
阅读量:5944 次
发布时间:2019-06-19

本文共 1406 字,大约阅读时间需要 4 分钟。

读写分离实现方式上主要分为两种:

一种是通过中间件,中间件方式实现比较复杂,技术要求比较高

一种是代码实现,改方式比较简单,只是在不同的项目都要重复实现

下面介绍代码实现读写分离的几种实现方式,项目是以spring boot 2.1.3版本实现, 不同的版本,配置的属性会有细微的差别! 项目功能描述

目前很多网站都拥有大量用户,而且很多用户同事操作。

一般写数据的性能比较低,而且写操作相对读是比较少的,大部分的操作都是读。

因此,项目的架构应该将读和写操作区分开来,保证读操作的性能来提高用户体验。

该项目主要是通过3种不同的方式来实现数据库的读写分离。 项目结构

--dynamic-ds-demo   --父项目, 管理依赖的jar

--rw-mapper        --子项目,通过映射不同的mapper文件实现读写分离

--rw-annotation     --子项目,通过手动指定注解的方法实现读写分离

--rw-interceptor     --子项目,通过mybatis插件实现读写分离 读写分离的实现方式之一

rw-mapper 实现步骤

一:读和写的操作,分别用不同的mapper接口文件,以及各自对应不同mapper.xml文件

二:分别配置读和写的数据源,然后在数据源配置类里面配置扫描的mapper接口路径,以及mapper.xml的路径

结论:

该方式需要将读操作和写操作放到不同的mapper文件,现实中我们一般都是按某个操作类型来区分的,所以该方式的控制粒度太粗,而且不灵活,不建议使用

(注意:需要数据源需要区分主从,也就是需要有一个用@primary注解标识的数据源)

读写分离的实现方式之二

rw-annotation 实现步骤

一:通过spring提供的AbstractRoutingDataSource来手动配置数据源

二:通过自定义注解手动设置数据源

三:通过注解切面,将指定的数据源设置到ThreadLocal

结论

该方式可以手动控制哪些方法操作哪个数据库,但是只能在方法级别的实行读写分离,粒度不够精细,不能控制到具体的增删改查方法上面。可以在某些只会操作从库的项目上面使用。

(注意:该方式需要排除spring boot的数据库自动配置,否则会有循环依赖问题,@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) ) 读写分离的实现方式之三

rw-interceptor 实现步骤

一:通过spring提供的AbstractRoutingDataSource配置数据源

二:实现mybatis的Interceptor拦截器,根据业务方法将数据源设置到ThreadLocal

三:蒋ThreadLocal变量的值赋值到AbstractRoutingDataSource提供的determineCurrentLookupKey

结论:

该方式是以mybatis插件提供读写分离,可以根据数据库执行的方法来设置数据源,从而实现增删改操作操作主库, 读操作操作从库,而且没有侵入性,推荐使用这种方法实现读写分离

代码地址:

(注意:需要使用mybatis orm框架)

转载于:https://juejin.im/post/5cb41d936fb9a068ad1b10ee

你可能感兴趣的文章
Ubuntu 14.04 Web服务器,Apache的安装和配置
查看>>
MaxCompute 图计算用户手册(上)
查看>>
自带科技基因,打造纯原创IP,“燃烧小宇宙”获数千万A轮融资
查看>>
未能加载文件或程序集"Newtonsoft.Json, Version=4.5.0.0
查看>>
C#多线程编程系列(二)- 线程基础
查看>>
Jenkins 内置变量(学习笔记二十四)
查看>>
PostgreSQL 10.1 手册_部分 II. SQL 语言_第 13 章 并发控制_13.2. 事务隔离
查看>>
虚拟机概念
查看>>
【云周刊】第195期:全球首家!阿里云获GNTC2018 网络创新大奖 成唯一获奖云服务商...
查看>>
【VS】使用vs2017自带的诊断工具(Diagnostic Tools)诊断程序的内存问题
查看>>
AutoScaling 支持从实例启动模板创建实例
查看>>
Mysql 查看视图、存储过程、函数、触发器
查看>>
Java提高篇(二):IO字节流、字符流和处理流
查看>>
云HBase集群的规划
查看>>
hello dato--graphlab create
查看>>
一个优质男朋友的标准
查看>>
浩鲸科技和京东加入 OpenMessaging 开源标准社区
查看>>
spring 注入方式
查看>>
FileZilla Client 3.42.0 beta1 发布,流行的 FTP 解决方案
查看>>
深度学习之迁移学习介绍与使用
查看>>