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

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
  项目目录结构

从实际应用看毫米波吹动5G的下一股春风不知不觉间,5G开始商用的那一天似乎就已经在翻过的日历中层叠起了历史的厚重感中国只用了两年,便已经建成了全球规模最大的已部署商用5G网络,拥有全球最多的5G接入用户与在网5G终端数乌镇之光超算中心近日落成,超级计算机何以超级?据中央广播电视总台中国之声9月28日报道,在世界互联网大会永久举办地桐乡乌镇,乌镇之光超算中心近日落成。作为浙江首个大型超算中心,乌镇之光从开工建设,到完成竣工验收,只用了273天阿里腾讯被迫握手言和阿里旗下多个App接入微信支付9月9日,工信部重拳出击整治多年以来困扰广大消费者的外链屏蔽问题。当天的会议相当像是一场鸿门宴,邀请了阿里百度华为腾讯字节跳动等几乎所有中国互联网巨头参与,目的很简单也很明确这些巨首款搭载瑞芯微RK3566运行Android11的H96Max电视盒发布了文章来源CNXSOFTWARE中文站嵌入式开发者的新闻知识库!瑞芯微RK3566搭载的是一个四核CortexA55处理器,配置了专为AIoT和NVR应用而设计的大量外设。它支持高动性价比才是王道!三款骁龙870手机推荐最低1999每年国庆假期不仅是出门旅游的好机会,更是各大电商和手机厂商们的促销时期,因此在这个时候入手一台新机十分划算。而在市售机型中,搭载骁龙870芯片的手机产品无疑有着很好的性价比,今天就异地组网稳定至上,蒲公英X5WiFi6路由器评测路由器是大家非常熟悉的网络设备,然而定位于家用的路由器在功能上往往不如企业级路由器全面,因为对于一家公司企业来说,数据共享是最基础的需求,同时还要确保共享文件的安全,遇到一些特殊情选电子产品校园一族关注多功能及智能化大学生在购置电子产品时,功能关注点集中在复合化人性化与智能化,手机购买则属于预算驱动,性价比最为关键,但存在品牌忠诚度,功能关注点集中在大存储长续航与拍照好等方面。天猫消电行业校园影像功能再升级iPhone14配置曝光中关村在线消息苹果新品iPhone13刚刚发售,有关于明年iPhone14的消息就已经来了。据数码博主熊猫很秃然爆料,iPhone14将搭载定制的索尼4800万像素主摄,并且min华为手机有哪些功能关掉比较好?华为手机有几个功能越早关闭越好,不然手机会越来越卡顿。华为手机凭借优秀的拍照国产麒麟芯片,风靡全球,受到越来越多人的喜爱,但是华为手机也有它的缺点,例如这几个功能不关闭的话,手机就OPPOK9Pro天玑120060W闪充120Hz电竞屏,比小米便宜以前都说OPPO高价低配,手机明明那么普通,搭载中端处理器,价格却比小米的旗舰机型还贵。于是,在很多人看来,OPPO手机高价低配。其实,OPPO正在改变。拿真我realme来说,它雷军称小米推动了全球手机普及,小米手机影响力到了什么程度2021世界互联网大会上,小米董事长雷军表示,小米推动了移动互联网的发展和全球手机普及,目前小米已经是全球第二大手机品牌。纵然上市后的小米已经忘记初心。纵然MIUl已经沦为小米最大
麦肯锡企业数字化转型失败率高达80企业通常会犯这样的错误,认为一家公司升级了技术,便能顺利完成数字化转型。然而,数字化转型不成功或与软件技术无关,组织的敏捷性和适应性也相当重要。这篇文章提供了企业判断自己是否具备数鹏博士携手四川省大数据产业联合会助力全省数字化转型5月8日,由四川省大数据产业联合会鹏博士电信传媒集团股份有限公司(以下简称鹏博士)联合主办的云上天府数字赋城企业数字化转型大会在成都隆重举办。会上,四川省大数据产业联合会常务副会长鹏博士代表川企亮相数字中国建设峰会受关注4月25日,第四届数字中国建设峰会在福建福州开幕,鹏博士作为四川省企业代表出席峰会,展示了其在智慧云网赋能数字城市治理方面的实践成果。据悉,本届数字中国建设峰会主题为激发数据要素新乘数字中国建设东风鹏博士有望打开新的增长空间第四届数字中国建设峰会于4月25日至26日在福建省福州市举行,本次峰会以激发数据要素新动能,开启数字中国新征程为主题。四川首次作为主宾省受邀参会,在第四届数字中国建设峰会上交流数字华为平板Q3出货量超苹果,再添MatePad助力!5G芯片成最大亮点?随着11月快接近尾声,华为旗下各类新品曝光消息也越来越多。昨日消息,华为正式官宣要在11月25日发布MatePad旗下首款高端平板。其实,此前余承东就给大家留了一个Mate家族要添属于国人的好声音!高颜值瓷音未来Mars蓝牙耳机仅百元我女朋友是个很奇怪的人,为什么这么说?因为她戴不惯入耳式耳机,所以无论是有线耳机,还是无线耳机,我都得给她买半入耳式的,而这就让我的选择范围小了很多。无意当中看到了瓷音未来Mars移动发布4G手机报告,华为一骑绝尘?网友荣耀才是功不可没昨日,中国移动终端实验室发布了2019年中国4G手机权威研究报告,对今年几大热门手机进行了实力排序。这次报告主要选取13个品牌41款手机,从通信能力多媒体能力产品可用性和用户口碑四真无线蓝牙耳机中的奇葩,南卡N2S让你意想不到最近市面上出现了各种各样的无线蓝牙耳机,而在这些耳机产品中,南卡N2S突然引起了我的兴趣,为什么这么说啦?因为相对于传统的蓝牙耳机产品,南卡N2S加入了特别多新奇功能,今天好物君就千元机就要面面俱到!这三款千元机随便挑,绝不会让你花冤枉钱疫情已经持续快两年时间了,很多朋友的经济状况也因此受到影响,越来越看重储蓄,即便是购买日常生活最重要的手机也降低了预算。小编挑选了几款各方面比较均衡的千元价位的手机在此与大家分享,千元高性价HIFI播放器,爱国者EROSA来袭相信很多朋友都听过爱国者这个品牌,爱国者成立于1993年,目前已经成长为中国数码领先品牌,旗下爱国者移动存储产品市场销量连续五年遥遥领先,而很多朋友不知道的是,其实爱国者也进军HIHarmonyOS生态赋能华为全屋智能战略升级推动数字家庭加快发展在10月23日举办的华为开发者大会上,华为12N的全屋智能解决方案得到再一次升级,全屋智能作为关键词之一成为与会专家开发者及媒体关注的重点。全屋智能作为HarmonyOS的有机载体