范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

基于ShardingSphereMybatisPlus实现影子库

  基于ShardingSphere+MybatisPlus实现影子库ShardingSphere影子库简介
  Apache ShardingSphere 通过解析 SQL,对传入的 SQL 进行影子判定,根据配置文件中用户设置的影子规则,路由到生产库或者影子库。架构图如下所示:
  应用场景
  影子库的应用场景是在全链路压测中对DB进行数据隔离。大白话就是压测数据进入影子库,用户正常请求的数据进入线上正式库,如下图所示:
  项目搭建技术框架
  SpringBoot + MybatisPlus + ShardingSphere + MySQL POM依赖                          org.springframework.boot             spring-boot-starter-web                                                                                                                                      org.springframework.boot             spring-boot-starter-test             test                               org.projectlombok             lombok             ${lombok.version}                               org.mybatis.spring.boot             mybatis-spring-boot-starter             ${mybatis.version}                               com.baomidou             mybatis-plus-boot-starter             ${mybatis.plus.version}                               com.baomidou             mybatis-plus-generator             ${mybatis.plus.version}                                org.apache.shardingsphere             shardingsphere-jdbc-core-spring-boot-starter             5.1.0                               org.apache.shardingsphere             shardingsphere-jdbc-spring-boot-starter-infra             5.1.0                               org.apache.shardingsphere             shardingsphere-shadow-spring-boot-starter             5.1.0                      影子库实现场景需求
  假设一个电商网站要对下单业务进行压测。压测相关表  t_order   为影子表,生产数据执行到  master   生产数据库,压测数据执行到数据库  shadow   影子库。
  压测标识使用ThreadLocal来存储,值为true:表示压测流量,false:表示正常流量。影子算法使用Hint 影子算法,配置的属性test: test。压测数据需要在原sql基础上添加 /*test:test*/  路由到影子库。
  建表脚本CREATE TABLE `t_order` (   `order_id` int(11) NOT NULL,   `user_id` int(11) NOT NULL,   PRIMARY KEY (`order_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4yml配置############################## #      影子库配置 ############################## spring:   shardingsphere:     datasource:       names: master,shadow       master:         type: com.zaxxer.hikari.HikariDataSource         driver-class-name: com.mysql.cj.jdbc.Driver         jdbc-url: jdbc:mysql://127.0.0.1:3306/test?useSSL=true&charset=utf8mb4&serverTimezone=Hongkong         username: root         password: 123456        shadow:         type: com.zaxxer.hikari.HikariDataSource         driver-class-name: com.mysql.cj.jdbc.Driver         jdbc-url: jdbc:mysql://127.0.0.1:3306/test_shadow?useSSL=true&charset=utf8mb4&serverTimezone=Hongkong         username: root         password: 123456      rules:       sql-parser:         #  开启支持Hint影子算法         sql-comment-parse-enabled: true       shadow:         data-sources:           # 定义影子数据源笔名           shadow-data-source-0:             source-data-source-name: master             shadow-data-source-name: shadow         tables:           # 定义影子表t_order           t_order:             # 使用数据源别名             data-source-names: shadow-data-source-0             # 影子算法             shadow-algorithm-names:               - fltest-hint-algorithm         shadow-algorithms:           fltest-hint-algorithm:             type: SIMPLE_HINT             props:               # ShadowInterceptor拦截SQL,在原SQL后添加/*test:test*/,有这个hint就会路由到shadow库中。               test: test      props:       # 日志输出到控制台       sql-show: true  mybatis-plus:   mapper-locations: classpath*:mapper/*.xml   type-aliases-package: com.hqg.study.example.entity   global-config:     db-config:       id-type: AUTO       field-strategy: NOT_NULL   configuration:     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  swagger:   enable: trueSQL拦截器
  拦截器根据ThreadLocalUtil.isTest()来检测当前是否是压测流量,如果是的话,会在原sql基础上添加 /*test:test*/  路由到影子库。 @Component @Setter @Accessors(chain = true) @Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})}) public class ShadowInterceptor extends AbstractSqlParserHandler implements Interceptor {      @Override     public Object intercept(Invocation invocation) throws Throwable {          StatementHandler statementHandler = PluginUtils.realTarget(invocation.getTarget());         MetaObject metaObject = SystemMetaObject.forObject(statementHandler);          // SQL 解析         this.sqlParser(metaObject);          // 针对定义了rowBounds,做为mapper接口方法的参数         BoundSql boundSql = (BoundSql) metaObject.getValue("delegate.boundSql");         String originalSql = boundSql.getSql();          // 压测时,通过注解走的影子库         if (ThreadLocalUtil.isTest()) {             originalSql = originalSql + "/*test:test*/";         }          metaObject.setValue("delegate.boundSql.sql", originalSql);         return invocation.proceed();     }      @Override     public Object plugin(Object target) {         if (target instanceof StatementHandler) {             return Plugin.wrap(target, this);         }         return target;     } }代码测试    /**      * 测试影子库      */     @Test     public void testShadow(){         ThreadLocalUtil.setTest(true);         TOrder tOrder = new TOrder();         tOrder.setOrderId(3);         tOrder.setUserId(3);         tOrderMapper.insert(tOrder);     }结果演示
  Actual SQL: shadow ::: INSERT INTO t_order ( order_id,user_id ) VALUES ( ?,? ) /test:test/ ::: [3, 3]

制造业引入CRM系统的好处及面临的挑战制造业引入CRM系统的好处及面临的挑战CRM不仅使管理客户信息变得更容易,还简化了操作并腾出时间来处理其他任务。Teamface企典将解释制造业中引入CRM系统时的好处制造业面临的集团企业OKR目标管理与KPI绩效考核结合应用方案集团企业OKR目标管理与KPI绩效考核结合应用方案公司应该设定KPI吗?应该根据员工的不同执行力制定不同目标吗?如何透过制定目标管理以激发员工的潜能与生产力?身为公司主管,如何判别企业绩效考核流于形式?组织绩效与OKR目标管理结合使用才是王道企业绩效考核流于形式?组织绩效与OKR目标管理结合使用才是王道!曾看到哈佛商业评论的研究评论说凡是采用绩效管理的公司,比没有采用绩效管理的公司,具有更高的盈利,更佳的资金流动,更强Google字节跳动用的OKR,3步骤让企业战略目标达标更有效率Google字节跳动华为都在用的OKR,3步骤让企业战略目标达标更有效率!事实上,愈来愈多企业引进另一种OKR制度作为管理方式,公开高度参与由下而上制订等特性,使得OKR日益受欢迎CRM系统打造自动化营销流程,分析客户需求,让业绩成长翻倍企业数字化CRM系统打造自动化营销流程,深度分析客户需求,让业绩成长翻倍!企业进行数位转型时为了节省大量重复高成本的环节,可藉由导入CRM系统来整合顾客信息与进行自动化营销达成目的集团企业目标管理与绩效考核全套方案集团企业目标管理与绩效考核全套方案员工目标管理订定原则?如何打造完善绩效考核标准你知道员工目标管理和绩效考核的精髓吗?究竟该如何制订完善的绩效考核才能有效评估员工状态?绩效管理需要企业员工绩效考核解决方案企业员工绩效考核解决方案绩效考核又称绩效考核或成果考核。绩效考核是企业为实现生产经营目的,运用具体的标准和指标,采取科学的方法,对承担生产经营过程和成果的各级管理人员完成指定任务的企业OKR目标管理执行解决方案企业OKR目标管理执行解决方案许多企业在导入OKR目标管理体系后,会出现okr管理体系不再企业战略目标的以内的情形,管理人员与员工都纷纷抱怨OKR不仅没有给工作带来便利与协作,甚至crm绩效考核管理系统解决方案crm绩效考核管理系统解决方案随着时间的推移,使用CRM系统的企业与日俱增。CRM透过多年销售管理工作的研究,企业管理者们可以利用CRM系统的绩效管理功能,实现对销售人员的绩效考核集团企业目标管理解决方案集团企业目标管理解决方案谈到企业目标管理,其实很多员工并不陌生,甚至是老生常谈的话题。但根据公司近两年召开的年度经营管理会议,特别是针对各经营单位的实际情况,如何制定现实可行的企业企业为什么需要拓展型crm系统?企业为什么需要拓展型crm系统?蓬勃发展的新技术为企业的发展提供了更多可能,数字化为企业发展带来了前所未有的巨大机遇,并已然渗透至各行各业,云服务软件是企业在这个时代最核心的抓手,
倾听你所想听Earfree无线蓝牙耳机测评前言自从3。5mm耳机孔被众多手机厂商取消以来,TWS真无线蓝牙耳机已经成为了每个用户的必需品,近期弱水科技推出了新品主动降噪蓝牙耳机Earfree无线蓝牙耳机,它具有六大优势,最首家ALIENWARE红店空降北京三里屯太古里挑战边界8月30日,首家ALIENWARE红店在北京三里屯太古里盛大开业。这是继ALIENWARE在苏州成都太古里北京国贸三家旗舰店之后,于前沿潮流时尚中心北京三里屯开设的又一家集产品服务社交取经后的Supercell当社交的目标被聚焦后,留住用户的是什么?推广费用水涨船高的年代,Supercell新游发布立刻获得了媒体的争相报道,这就是已经塑造的品牌力量。不过受益者并非只有Supercell自监管层首次公开表态高比例抽成严重影响产业的可持续发展如今看来,平台下调分成已箭在弦上。7月29日,中国国际数字娱乐产业大会(CDEC)在上海浦东嘉里酒店召开,全国政协委员中国音像与数字出版协会理事长孙寿山发表主旨演讲。在演讲当中,孙洋葱工厂布朗尼LED补光灯上手前言都说摄影是用光钱的艺术。哦,不对。摄影是用光的艺术。今儿,特特就带大家来看看我最近入手的洋葱工厂布朗尼LED补光灯,并附上一张使用它拍摄产品图,很多时候器材不重要,重要的是想法带上心想柳橙机随时喝一杯纯正的橙汁从吃饱到吃出营养,我们的生活发生了翻天覆地的变化,尤其2020年这个不平凡的年份,因为新冠病毒让人们拼起了免疫力。为了增强免疫力人们加强了运动,改变了生活习惯,注重营养均衡,懂得如宝妈的晨起生活先从牛排开始万事都是双刃剑,一点都不假,有俩娃的日子是辛苦的也是快乐的。生完老大8年后赶上国家二胎政策,首当其冲生了二宝。时光荏苒,不知不觉二宝也四岁了。为了助力两娃健康成长,我一个事业型的知从单向输出到双向深度互动虎牙用技术驱动直播变革直播的形态正在悄然发生变化。发展了近15年,伴随着移动互联网带来的人口红利达到边界,网络直播行业正在面临新一轮的挑战,用户对直播内容质量互动体验等要求变得越来越高。反映到直播平台的孙悟空黑猫警长各显神通,和平精英和上美影整了一出好活美猴王的金箍棒与黑猫警长的飞天摩托车孰强?9月8日,和平精英光影冒险版本正式上线。在新游戏版本中,和平精英与上美影展开了深度联动,四大经典动画IP大闹天宫宝莲灯黑猫警长九色鹿被深度漫威IP加持,网易的竞技梦这次能成么?多元化的方向和跨圈纳新的可能CCG融合自走棋思路的漫威对决国服上线了,上线首日表现不俗,不仅登顶了TapTap热门榜,并且评分还稳定在了9。0分,从侧面反映出核心卡牌圈对游戏的认可揭开重生边缘的面纱一次自我成长的探索尝试迎难而上才能在未来更进一步8月28日,NExTStudios第一次进行了重生边缘的完整版的测试,结果有好有坏。既有玩家对于包括芯控在内等创新玩法的认可,也有对游戏优化的吐槽。对于不