城市直播房产教育博客汽车
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

基于ShardingSphereMybatisPlus实现影

9月5日 孤小单投稿
  基于ShardingSphereMybatisPlus实现影子库ShardingSphere影子库简介
  ApacheShardingSphere通过解析SQL,对传入的SQL进行影子判定,根据配置文件中用户设置的影子规则,路由到生产库或者影子库。架构图如下所示:
  应用场景
  影子库的应用场景是在全链路压测中对DB进行数据隔离。大白话就是压测数据进入影子库,用户正常请求的数据进入线上正式库,如下图所示:
  项目搭建技术框架
  SpringBootMybatisPlusShardingSphereMySQLPOM依赖dependenciesdependencygroupIdorg。springframework。bootgroupIdspringbootstarterwebartifactId!exclusions!exclusion!springbootstarterloggingartifactId!groupIdorg。springframework。bootgroupId!exclusion!exclusionsdependencydependencygroupIdorg。springframework。bootgroupIdspringbootstartertestartifactIdscopetestscopedependencydependencygroupIdorg。projectlombokgroupIdlombokartifactIdversion{lombok。version}versiondependencydependencygroupIdorg。mybatis。spring。bootgroupIdmybatisspringbootstarterartifactIdversion{mybatis。version}versiondependencydependencygroupIdcom。baomidougroupIdmybatisplusbootstarterartifactIdversion{mybatis。plus。version}versiondependencydependencygroupIdcom。baomidougroupIdmybatisplusgeneratorartifactIdversion{mybatis。plus。version}versiondependencydependencygroupIdorg。apache。shardingspheregroupIdshardingspherejdbccorespringbootstarterartifactIdversion5。1。0versiondependencydependencygroupIdorg。apache。shardingspheregroupIdshardingspherejdbcspringbootstarterinfraartifactIdversion5。1。0versiondependencydependencygroupIdorg。apache。shardingspheregroupIdshardingsphereshadowspringbootstarterartifactIdversion5。1。0versiondependencydependencies影子库实现场景需求
  假设一个电商网站要对下单业务进行压测。压测相关表torder为影子表,生产数据执行到master生产数据库,压测数据执行到数据库shadow影子库。
  压测标识使用ThreadLocal来存储,值为true:表示压测流量,false:表示正常流量。影子算法使用Hint影子算法,配置的属性test:test。压测数据需要在原sql基础上添加test:test路由到影子库。
  建表脚本CREATETABLEtorder(orderidint(11)NOTNULL,useridint(11)NOTNULL,PRIMARYKEY(orderid))ENGINEInnoDBDEFAULTCHARSETutf8mb4yml配置影子库配置spring:shardingsphere:datasource:names:master,shadowmaster:type:com。zaxxer。hikari。HikariDataSourcedriverclassname:com。mysql。cj。jdbc。Driverjdbcurl:jdbc:mysql:127。0。0。1:3306test?useSSLtruecharsetutf8mb4serverTimezoneHongkongusername:rootpassword:123456shadow:type:com。zaxxer。hikari。HikariDataSourcedriverclassname:com。mysql。cj。jdbc。Driverjdbcurl:jdbc:mysql:127。0。0。1:3306testshadow?useSSLtruecharsetutf8mb4serverTimezoneHongkongusername:rootpassword:123456rules:sqlparser:开启支持Hint影子算法sqlcommentparseenabled:trueshadow:datasources:定义影子数据源笔名shadowdatasource0:sourcedatasourcename:mastershadowdatasourcename:shadowtables:定义影子表tordertorder:使用数据源别名datasourcenames:shadowdatasource0影子算法shadowalgorithmnames:fltesthintalgorithmshadowalgorithms:fltesthintalgorithm:type:SIMPLEHINTprops:ShadowInterceptor拦截SQL,在原SQL后添加test:test,有这个hint就会路由到shadow库中。test:testprops:ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a输出到控制台sqlshow:truemybatisplus:mapperlocations:classpath:mapper。xmltypealiasespackage:com。hqg。study。example。entityglobalconfig:dbconfig:idtype:AUTOfieldstrategy:NOTNULLconfiguration:logimpl:org。apache。ibatis。logging。stdout。StdOutImplswagger:enable:trueSQL拦截器
  拦截器根据ThreadLocalUtil。isTest()来检测当前是否是压测流量,如果是的话,会在原sql基础上添加test:test路由到影子库。ComponentSetterAccessors(chaintrue)Intercepts({Signature(typeStatementHandler。class,methodprepare,args{Connection。class,Integer。class})})publicclassShadowInterceptorextendsAbstractSqlParserHandlerimplementsInterceptor{OverridepublicObjectintercept(Invocationinvocation)throwsThrowable{StatementHandlerstatementHandlerPluginUtils。realTarget(invocation。getTarget());MetaObjectmetaObjectSystemMetaObject。forObject(statementHandler);SQL解析this。sqlParser(metaObject);针对定义了rowBounds,做为mapper接口方法的参数BoundSqlboundSql(BoundSql)metaObject。getValue(delegate。boundSql);StringoriginalSqlboundSql。getSql();压测时,通过注解走的影子库if(ThreadLocalUtil。isTest()){originalSqloriginalSqltest:}metaObject。setValue(delegate。boundSql。sql,originalSql);returninvocation。proceed();}OverridepublicObjectplugin(Objecttarget){if(targetinstanceofStatementHandler){returnPlugin。wrap(target,this);}}}代码测试测试影子库TestpublicvoidtestShadow(){ThreadLocalUtil。setTest(true);TOrdertOrdernewTOrder();tOrder。setOrderId(3);tOrder。setUserId(3);tOrderMapper。insert(tOrder);}结果演示
  ActualSQL:shadow:::INSERTINTOtorder(orderid,userid)VALUES(?,?)test:test:::〔3,3〕
搜索 投诉 评论 转载

美国人一日三餐都吃啥?跟中国对比后,网友还是喜欢中国菜每个人在旅行的过程中,除了要看看当地的风景以外,更重要的也是想要品尝美食!更多的家庭不管是出门旅行还是在家都非常重视饮食的搭配!毕竟合理的饮食才能够给人更高质量的生活,带……实体经济迎来重大利好了2022年的经济难道就这样一直消沉下去吗?也不是了最近这几天越来越多利好的消息了,在双11当天央行与银保监发布《关于做好当前金融支持房地产市场平稳健康发展工作的通知》提出了房地……国内油价或将再下调!全国调价后今天9月25日92号95号汽油有料财经的今日国内油价调整最新消息:美元加息影响全球金融市场,亚太股市、欧美股市、原油市场、债券市场全线下跌!在美国股市方面,道琼斯指数下跌1。62,跌破3万点大关并创下今年新……英中蕾哈娜在达到14亿美元净资产后成为最年轻的女性亿万富翁Rihannabecomesyoungestwomanbillionaireafterhitting1。4Bnetworth蕾哈娜在达到14亿美元的净资产后成为最年轻的女……基于ShardingSphereMybatisPlus实现影基于ShardingSphereMybatisPlus实现影子库ShardingSphere影子库简介ApacheShardingSphere通过解析SQL,对传入的SQ……雾里看花,跟亚洲股神学投资丨全球金融观关心市场的小伙伴一定会注意到,在国庆黄金周的长假之前,也就是9月29日,我正好是在这一天香港股市收市以后,跟小伙伴们分享这个星期的投资的一些心得体会。在三大市场当中,我始终认为……曼联球迷滑跪庆祝!全球首富马斯克我要买曼联了全球首富、特斯拉和SpaceX的CEO马斯克在推特上发文:我要买曼联了,不客气!在今年4月份《福布斯》公布的2022年全球亿万富豪榜中,埃隆马斯克以2190亿美元净资产成……每日摘抄写作金句(11)人民日报谈心态物随心转,境由心造,在不同的心态作用下,人们必然会表现出不同的精神状态和行为特点,行事结果也因此而不同。由此而言,心态决定状态,状态决定成败。认清楚自己,养护好心态,校正好方向……女篮最美的劳伦。杰克逊居然能写出这么优美的情书可惜落花无意劳伦。杰克逊写给姚m最有水平的情书:通篇满满的情谊,却没有一个字说写给谁,原来西方人在表达感情的时候也是含蓄的,含蓄的外人都看不懂,不知道姚老师老婆叶莉能不能看懂〔偷笑〕〔偷笑……湖人官宣退役!詹姆斯成大赢家,杜兰特排第二,东契奇赢下约基奇今年休赛期相当的无聊,这点是大家公认的。千万不要说不是有杜兰特交易吊大家的胃口吗?那咱们可以看看,吊了这么长时间的胃口,有什么动作出现吗?答案是没有的,是真正意义上的雷声大雨点……黑眼圈门诊一号难求,医生表示这些人不需要过度干预这届年轻人很多人都有黑眼圈困扰虽然说不影响身体健康但它作为颜值杀手着实让人脑瓜疼去年10月南京市第二医院开设的黑眼圈门诊需求火热……生娃坐个好月子,避开那些坑,选家人月嫂居家还是月子会所(二)上一篇讲到选择坐月子方式的三个维度第一条,今天我们接着讲。家庭收入:生娃坐月子毕竟是一个花钱的事情,对钱不能避而不谈,如果不考虑钱的因素,只从科学健康、舒适舒服、省……
微信安卓8。0。32内测更新!全新带来这6个功能和变化(附下明明年纪一样,脸却天差地别,这7对整容or没整的明星,差别真中国男足留洋军团即将迎来新面孔,曾是当打国脚,新东家已敲定地球并非从一开始就拥有氧气,未来氧气会消失吗?有可能澄迈十二时辰在辉隆庄园里,偷得浮生半日闲二维码在中国的应用发挥到极致,令人叹为观止用于开发各种光学器件的高效材料技术实现突破002606大连电瓷糖尿病吃西瓜,升血糖还是降血糖呢?不妨早点了解,别吃错了勇士激战黄蜂!克莱炸裂20分普尔有点铁大聪明进步明显散文冬天童年的我童话作文技巧汇总
圣诞快乐!请速来查收沙雕游戏旗鱼能吃吗,有天敌吗铝型材购销合同真诚赞美别人不必抬高自己好文:关于枭雄和英雄的意思介绍(枭雄是什么意思和英雄的区别) 伊蒂之屋甜蜜之恋晶莹炫彩唇膏多少钱伊蒂之屋唇膏许国鹏王晨光:徘徊在限权与放权之间社会转型时期对司法理念的探撒尿牛丸煮的时间(撒尿牛丸要煮多久才能熟)热博聚热点网 你所做的一切是为了自己还是为了别人?孕妈早知道长见识,这样做助你生个健康漂亮的宝宝?孕妇吃板栗生的好还是熟的好青霉素过敏休克属于什么超敏反应

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁