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

SpringBoot2。x整合百度UidGenerator

  一、UidGenerator是什么
  UidGenerator是百度开源的一款分布式高性能的唯一ID生成器,是基于snowflake模型的一种ID生成器二、UidGenerator的优势1.解决了时钟回调的问题
  2.使用ringbuffer,无锁进行id的生产与消费,速度非常快
  3.适用于多线程,不会有单线程瓶颈三、整合
  本次通过SpringBoot2.x和MyBatis对百度UidGenerator进行整合。
  3.1 UidGenerator引入
  一般使用两种方式引入UidGenerator:
  (1)从官网下载源码作为自己项目的一个Module引入到项目中
  官网地址:github.com/baidu/uid-g…
  (2)互联网jar包引入(本文采取的是该种方式)
  因为UidGenerator自带引入了mybatis,和自己项目有冲突的可以进行排除     com.xfvape.uid     uid-generator     0.0.4-RELEASE 
  排除冲突依赖
  uid-generator中依赖了logback和mybatis。一般在项目搭建过程中,springboot中已经有了logback依赖,mybatis会作为单独的依赖引入。如果版本和uid-generator中的依赖不一致的话,就会导致冲突。
  排除冲突的依赖如下:     com.xfvape.uid     uid-generator     0.0.4-RELEASE                               org.slf4j                 log4j-over-slf4j                                   ch.qos.logback                 logback-classic                                   org.slf4j                 slf4j-api                                    org.mybatis                 mybatis-spring                                   org.mybatis                 mybatis               
  3.2 创建表
  在 MySQL数据库中建一个名为 WORKER_NODE的数据表,其 sql如下:CREATE TABLE WORKER_NODE (     ID BIGINT NOT NULL AUTO_INCREMENT COMMENT "auto increment id",     HOST_NAME VARCHAR(64) NOT NULL COMMENT "host name",     PORT VARCHAR(64) NOT NULL COMMENT "port",     TYPE INT NOT NULL COMMENT "node type: ACTUAL or CONTAINER",     LAUNCH_DATE DATE NOT NULL COMMENT "launch date",     MODIFIED TIMESTAMP NOT NULL COMMENT "modified time",     CREATED TIMESTAMP NOT NULL COMMENT "created time",     PRIMARY KEY(ID) )  COMMENT="DB WorkerID Assigner for UID Generator",ENGINE = INNODB;
  建表时可能会报错,原因是该建表语句定义了两个TIMESTAMP字段,因为mysql 低版本控制比较严格
  解决办法:
  方式一:
  直接把TIMESTAMP改成DATETIME 即可
  方式二:
  建表前先设置sql_mode:set sql_mode="NO_ENGINE_SUBSTITUTION";
  3.3 将uid-generator核心对象装配为spring的bean
  uid-generator提供了两种生成器: DefaultUidGenerator、CachedUidGenerator。如对UID生成性能有要求, 请使用CachedUidGenerator。@Configuration public class WorkerNodeConfig {      @Bean("disposableWorkerIdAssigner")     public DisposableWorkerIdAssigner disposableWorkerIdAssigner(){         DisposableWorkerIdAssigner disposableWorkerIdAssigner = new DisposableWorkerIdAssigner();         return  disposableWorkerIdAssigner;     }      @Bean("cachedUidGenerator")     public UidGenerator uidGenerator(DisposableWorkerIdAssigner disposableWorkerIdAssigner){         CachedUidGenerator cachedUidGenerator = new CachedUidGenerator();         cachedUidGenerator.setWorkerIdAssigner(disposableWorkerIdAssigner);         return cachedUidGenerator;     } }
  直接创建WorkerNodeConfig类,复制以上代码。
  3.4 重写WorkerIdAssigner接口public class DisposableWorkerIdAssigner implements WorkerIdAssigner {      @Resource     private WorkerNodeMapper workerNodeMapper;     @Override     @Transactional     public long assignWorkerId() {         WorkerNode workerNode = buildWorkerNode();          workerNodeMapper.addWorkerNode(workerNode);          return workerNode.getId();     }      private WorkerNode buildWorkerNode() {         WorkerNode workNode = new WorkerNode();         if (DockerUtils.isDocker()) {             workNode.setType(WorkerNodeType.CONTAINER.value());             workNode.setHostName(DockerUtils.getDockerHost());             workNode.setPort(DockerUtils.getDockerPort());             workNode.setLaunchDate(new Date());         } else {             workNode.setType(WorkerNodeType.ACTUAL.value());             workNode.setHostName(NetUtils.getLocalAddress());             workNode.setPort(System.currentTimeMillis() + "-" + RandomUtils.nextInt(100000));             workNode.setLaunchDate(new Date());         }          return workNode;     } }
  创建一个DisposableWorkerIdAssigner类直接复制以上代码。
  3.5 引入WorkerNodeMapper.xml<?xml version="1.0" encoding="UTF-8"?>                                                        INSERT INTO WORKER_NODE         (HOST_NAME,          PORT,          TYPE,          LAUNCH_DATE,          MODIFIED,          CREATED)         VALUES (            #{hostName},            #{port},            #{type},            #{launchDate},            NOW(),            NOW())          
  可以通过mybatis生成工具直接生成文件和实体类,然后将插入和查询方法复制
  注意修改resultMap中的type和insert中的keyProperty为自身项目的实体类地址
  在application.yml文件中增加如下配置mybatis:   mapper-locations: classpath:mybatis/*.xml
  3.6实体类
  使用插件生成的实体类
  3.7创建Mapper@Mapper public interface WorkerNodeMapper {      int addWorkerNode(WorkerNode workerNodeEntity);       WorkerNode getWorkerNodeByHostPort(@Param("host") String host, @Param("port") String port);  }
  3.8 Service
  IWorkerNodeService接口public interface IWorkerNodeService {     public long genUid(); }
  WorkerNodeServiceImpl实现类@Service public class WorkerNodeServiceImpl implements IWorkerNodeService {     @Resource     private UidGenerator uidGenerator;      @Override     public long genUid() {         Long uu_id = UidGeneratorComponent.uu_id;         return uidGenerator.getUID();     } }
  3.8 Controller@RestController public class WorkerNodeServiceController {     @Resource     private IWorkerNodeService workerNodeService;     /**      * 集成百度uid-generator生成id      * @return      */     @GetMapping("/baidu/uid")     public long baiduUid(){         long uid = workerNodeService.genUid();         return uid;     } }
  3.9 访问接口测试
  http://127.0.0.1:8099/test/baidu/uid
  项目目录结构

内存不够用怎么办?三款大内存手机闭眼入,拒绝内存焦虑文这是什么鸭小怡不知道大家发现没有,随着手机性能的提升,现在换手机的理由不是手机变卡或者是哪个功能故障了,而是内存不够用。近日,手机APP日益膨胀的相关话题也是直接冲上热搜,那些喜不要只看甲醛,室内污染还有很多新房如何选购空气净化器?作为智能家居博主,今年脱离老本行太久,可能是家里多了个消耗品把我带偏了。当然也因为他,我的内容发生了一些变化,逐渐向育儿博主靠拢。前段时间测评过一款空气净化器,就因为生小宝宝赶上重电脑硬件的一些基本知识主板1主板介绍如果把电脑比作一座繁华的城市,那么我觉得主板就是城市中密集的道路网。主板是一块印刷电路板,上面集成了各种电路以及元器件。打开机箱侧板,移除CPU散热器以及显卡之后,暴露在浩渺的冥王星上面全是远古病毒?冥王星是太阳的行星中最远的一个,距太阳系中心为36亿英里,除此就别无所知了。1930年天文学家克莱德汤博在亚利桑那洲洛厄尔天文台证实了长期猜想中的冥王星的存在。如果它有大气的话,它太阳系的八大行星,他们的天空是什么颜色的?科学家给出答案,首先是我们赖以生存的地球,相信大家都比较的熟悉,在天气好的时候天空是蓝色的,而阴天的时候是灰色的,在傍晚或者早上会出现金色或红色的天空。地球是八大行星中天空颜色最绚科学家在两颗外来系外行星周围检测到意外元素艺术家的插图展示了系外行星WASP76b的夜景。你看到的雨是由铁滴组成的周四,与欧洲南方天文台超大望远镜合作的天文学家宣布了一项令人困惑的发现。两颗系外行星,都已经被认为是非常奇特电动化冲击下,别克GL8还能定义中国MPV吗?导读取得近3万辆前期订单的腾势,已经展现出爆款和市场颠覆者的潜力。随着极氪009等新车入局,中国新能源汽车有望在中高端MPV市场进一步扩大影响力。(文潘昱辰编辑周远方)别克GL8曾虚拟PLC迈向实用化软件定义自动化的新号角作者彭瑜上海工业自动化仪表研究院,PLCopen中国组织编审林雪萍北京联讯动力咨询公司总经理,天津大学精仪学院兼职教授虚拟PLC系统到底是什么样?一直听上去有些玄乎的想法,现在有了金川国家矿山公园是仰望太阳系形成的入口图永昌金川国家矿山公园图我是我的路,我又上路了。秋天十月国庆假日,我走在金川国家矿山公园,一个迷人柔美长发披于双肩之上,有一缕自然灵气的女子喃喃自语我们对人生与世界的关切点并非是人汉王新品N10mini7。8寸手感绝佳,这是要重新定义墨水屏的节奏?10月12日,作为国内人工智能产业先行者的汉王科技,举办了一场2022年秋季新品发布会(云端发布会),由汉王科技副总裁王杰主持,发布会共有2款新品,其中最让网友们心心念念的就是这款快船连裁三人,76人连裁两人,太阳裁掉李,马刺签下斯蒂芬北京时间10月14日,虽然NBA休赛期已经结束,季前赛也正在如火如荼的进行中,但是各支球队仍然没有结束调整阵容的步伐,各种交易传闻也是满天飞。就在刚刚过去的一个上午,NBA联盟中又
吞入甲烷,吐出电子,发电细菌生成超稳定蛋白质纳米线科技日报实习记者张佳欣据最新一期自然微生物学杂志,美国耶鲁大学团队发现,地杆菌制造的蛋白质具有线状特性,与吃甲烷的微生物相似,而地杆菌可发电,这意味着其有望吞下废气并呼出电子。该发千张藏在身边的蛋白质王者!高营养,随手煮,好一道下饭菜蛋白质被称为是生命的积木,人体各方面都离不开它,人体缺乏蛋白质时最直观的感受就是免疫力下降,容易生病,且病后康复慢,也会瘦弱无力,给人弱不禁风的感觉。那每天要补充多少蛋白质呢?你可修肤研究所抵御老化修复敏感成纤维细胞蛋白对于敏感性肌肤而言,美肤需求不止是修复受损皮肤细胞,缓解敏感症状,也需要提升肌肤的细腻度,光泽度,维持肌肤健康状态。今天,一起来了解抵御老化,修复敏感成纤维细胞蛋白。什么是成纤维细2023年一份详细的GoogleSEO指南!什么是搜索引擎优化?搜索引擎优化(SEO)是一种持续优化网站以在有机搜索结果中获得更高排名的做法,重点关注流行的搜索引擎,例如Google。GoogleSEOSEO不仅仅是优化你的wxPython查找替换对话框FindReplaceDialog实战wxPython系列025在进行文本处理的GUI程序中,常常需要对文本中的一些文字进行查找和(或)替换操作,在这种情况下,就需要一个具有查找替换功能的对话框来交互完成需要的功能摊牌了?切断所有供应成闹剧,美媒压死美企的最后一根稻草众所周知,在过去几年里,华为等中企被美盯上,遭遇了多次特殊照顾。除了5G领域外,老美利用其芯片技术优势,对中企进行了全面封锁。要知道,芯片是科技领域的大脑中枢,无芯可用无异于将中企还不会用chatGPT?注册使用保姆教程能够成功体验的亲们给个免费的赞吧,评论区分享一下自己搞笑的试用段子准备1翻那啥的工具,淘宝购买朋友借用有日常翻墙使用场景的花钱畅玩(墙裂推荐veee)2google邮箱账号3支付宝阿里云何以踩刹车?图片来源视觉中国文蓝莓财经在去年12月30日,荣耀CEO赵明发布新年致辞时提到面对全球高端市场的蓬勃发展,我们要在全新的高端旗舰手机上构筑起影像通信安全智慧化的领先能力,并在折叠屏梅西无缘战拜仁?大巴黎当头一棒法甲豪门巴黎圣日耳曼最近走了霉运,不仅在法国杯被马赛挡在八强大门之外,还付出超级巨星梅西受伤的惨痛代价2月9日在大巴黎以1比2不敌马赛淘汰,梅西打满全场但状态不佳,赛后还感到腿筋不如何办理互联网药品信息服务许可证?办理都需要准备什么呢?大家已经对互联网药品信息服务许可证有了一定的了解,那么申请办理互联网药品信息服务许可证的资料有哪些,下面一起来了解一下吧。申请提供互联网药品信息服务应该提交以下材料第一公司营业执照无网无电也能支付!数字人民币新功能上线,安全吗?近日,数字人民币无网无电支付新功能上线,引发关注。部分安卓手机用户发现,在数字人民币App硬钱包的支付设置中新增了无网无电支付功能入口。数字人民币无网无电支付,顾名思义,就是在手机