网站关键词怎么做排名,农林网站建设公司,北京网站建设产品介绍,游戏科技网站shigen坚持日更的博客写手#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。坚持记录和分享从业两年以来的技术积累和思考#xff0c;不断沉淀和成长。 最近shigen加班也比较严重#xff0c;很多天文章没有更新了#xff0c;各位读者和伙伴见… shigen坚持日更的博客写手擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。坚持记录和分享从业两年以来的技术积累和思考不断沉淀和成长。 最近shigen加班也比较严重很多天文章没有更新了各位读者和伙伴见谅哈。 好的现在我们进入正题。在之前的文章一文讲清楚mysql主从服务的搭建过程中我相信伙伴们已经清楚了docker如何快速的搭建mysql主从服务了。那怎么使用呢这个问题在shigen的心里藏了很久趁着周末的功夫我正好研究了一下并把我的代码master-slave-demo放在了gitee上感兴趣的伙伴可以自己上去看看。当然也欢迎大家提出优化的点shigen会及时的回复和更新。
在开始之前我们用一个图展示出读写分离的原理 不会这么简单吧是的你没有看错。就当我思考如何展示出这个概念的时候我发现一张图就这样简单的展示出来了不可思议。但是事实就是这么简单。
现在我们的难点就是如何判断用户的请求是读请求还是写请求然后切换到不同的数据库。 若依框架的多数据库似乎给了我灵感但是我还没来得及看。现在自己造一个出来文章中的部分代码参考springbootmybatis-plus实现读写分离。
老规矩我们先把自己的mysql集群启动。 启动完毕之后我们开始新建项目master-slave-demo。 引入项目需要的依赖 常用的我不说了这里需要注意
引入spring-boot-starter-aop我们需要用到spring的切片功能mysql的驱动名字变了com.mysql.mysql-connector-j,伙伴们可以关注一下需要进入alibaba的druid实现多数据源
配置文件多数据源 这里主要是配置了多个数据源还有mybatis-plus需要的配置具体的配置项含义可参考详细的注释
配置类 这里主要是读取我们在yaml配置文件的配置并将bean放在DateSource中现在我们需要的是一个路由动态的切换数据源
数据源路由 数据源路由应需求而生我们需要做的事就是从重写一下路由规则规则是我们定制的这里我们设置了一个dataSourceContextHolder。这个是不是很熟悉什么holder的 就自然引入了线程上下文ThreadLocal。
DataSourceContextHolder 这里的轮训是我设计的一个缺陷我之前针对的是一主两从的设计所以对2取模这里对于一主一丛设计的作用不大。这个类主要的作用就是将不同的数据源塞到县城上下文中。那我们怎么决定呢我们需要一个切片
切片设计 代码的核心主要是拦截我们去查询、修改数据的方法然后修改上下文。其中Master注解是我单独设计的可以用来实现这样的功能部分接口查询主数据库。其它的就是spring的aop的使用了这里不加赘述
补充
需要注意的是我们的ORM框架是mybatis-plus我们仍然需要告诉它你该用哪个数据源。 OK,一番准备之后我们来测试一下实现的效果。效果我们可以看到会打印出部分的日志我们根据日志区分同时我也会采用断点跟进的方式动态追踪代码。
对我先看一下我的测试接口 开始测试了
查询数据 查询数据但是从主节点 这里有个很有意思的现象出现了进入读切点的日志Master应该放在service包下的方法。 对这里需要改一下 因为现在只有一个从节点了不需要轮训了。
添加数据 可以看到效果已经实现了源码可以到上文提到的仓库查看。 以上就是今天分享的全部内容了觉得不错的话记得点赞 在看 关注支持一下哈您的鼓励和支持将是shigen坚持日更的动力。同时shigen在多个平台都有文章的同步也可以同步的浏览和订阅
平台备注链接CSDN知名博客平台很少关注shigen的CSDN主页知乎专注内容分享和问题解答shigen的知乎主页掘金高质量博客平台shigen的掘金主页腾讯云开发者社区腾讯云开发者社区shigen的腾讯云开发者社区主页微信公众平台个人微信公众号分享技术和日常公众号名shigen
与shigen一起每天不一样