喀拉喀托火山,印度尼西亚 (© Martin Rietze/Alamy)


概 述

ID号生成器(或:全局唯一ID生成器)是服务端系统的基础设施,而且ID号这个东西基本搞后端开发的程序员天天都要接触。而关于ID生成的算法现在业界首屈一指的当属 Snowflake雪花算法。

UidGenerator正是百度开源的一款基于 Snowflake雪花算法实现的高性能唯一ID生成器。在本号前文中已经详细使用过 UidGenerator,但使用过程还是比较繁杂,还需要自己去引 UidGenerator组件的源码,感觉有点不方便。为此本文基于 UidGenerator,再来封装一套更利于 SpringBoot项目使用的 ID号生成组件,命名为 id-spring-boot-starter,一看名字就知道是开箱即用的。


用 法

  • 首先导入SQL脚本
    DROP TABLE IF EXISTS WORKER_NODE;    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;

这一步肯定是省不掉,毕竟 UidGenerator需要数据库支持

  • pom中加入依赖
    <dependency>        <groupId>cn.codesheep</groupId>        <artifactId>id-spring-boot-starter</artifactId>        <version>1.0.0</version>    </dependency>
  • 配置数据库连接
    url: jdbc:mysql://xxx.xxx.xxx.xxx:3306/demo?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useOldAliasMetadataBehavior=true&connectionCollation=utf8mb4_unicode_ci&rewriteBatchedStatements=true&allowMultiQueries=true    username: xxxxxx    password: xxxxxx

还是因为 UidGenerator需要数据库支持

  • 修改Spring Boot主类

Spring Boot应用主类上加上 mybatis注解即可:

@MapperScan({"com.baidu.fsg.uid.worker.dao"})
  • 代码使用方式
    @RestController    public class TestController {      @Autowired      private UidGenService uidGenService;      @GetMapping("/uid")      public String genUid() {        return String.valueOf("本次生成的唯一ID号为:"+uidGenService.getUid());      }    }

怎么样,用法超级简单吧:

  1. 首先用 Autowired的方式引入 UidGenService类;

  2. 直接调用 UidGenService类的 getUid()方法即可获得一个 Long型的 ID号
  • 运行效果

demo源码在此,需要请自提:

  • https://github.com/hansonwang99/Spring-Boot-In-Action/tree/master/test-id-spring-boot-starter

源码下载

需要组件 id-spring-boot-starter源码进行自定制的,可以去 github上自行下载源代码,地址在此:

  • https://github.com/hansonwang99/Spring-Boot-In-Action/tree/master/id-spring-boot-starter

几个注意点

  • 由于 UidGenerator需要数据库支持,因此使用前一定要导数据表,并且要配置 MapperScan
  • 需要高度定制 UidGenerator组件详情的,可以自行修改 id-spring-boot-starter内部的 cached-uid-spring.xml文件,然后重新打 jar包

  • 由于 ID号生成一般属于系统基础服务,因此可以独立成一个微服务,供其他微服务调用

后 记

若有错误或者不当之处,可在本公众号内反馈,一起学习交流!

更多热文在此:

● Spring Boot 系列实战文章合集(源码已开源)

● 程序员写简历时必须注意的技术词汇拼写

● 基于Spring Security OAuth2的SSO单点登录+JWT权限控制实战

● 从一份配置清单详解Nginx服务器配置

● 如何在Windows下像Mac一样优雅的开发

● Docker容器可视化监控中心搭建

● 利用ELK搭建Docker容器化应用日志中心

● RPC框架实践之:Google gRPC

● 一文详解 Linux系统常用监控工具

更多 务实、能看懂、可复现的 技术文章尽在公众号 CodeSheep,欢迎扫码订阅,第一时间获取更新 ⬇️⬇️⬇️

©著作权归作者所有:来自51CTO博客作者mb5fdcae83766b7的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 如何开发跨框架组件?[每日前端夜话0xA6]
  2. 链路追踪 SkyWalking 源码分析 —— Collector Storage 存储组件
  3. 链路追踪 SkyWalking 源码分析 —— Collector Cache 缓存组件
  4. Spring Boot 工程集成全局唯一ID生成器 Vesta
  5. Spring Boot工程集成全局唯一ID生成器 UidGenerator
  6. 超实用的VueJS滑块组件,支持级联滑动和渐变色
  7. AngularJS 日期时间选择组件(附详细使用方法)
  8. React教程:组件,Hooks和性能 [每日前端夜话0x36]
  9. 怎样开发可重用组件并发布到NPM [每日前端夜话0x24]

随机推荐

  1. Android中使用Handler造成内存泄露
  2. 【Android学习入门】Android中activity的
  3. android 本地数据库sqlite的封装
  4. 【收藏】android WebView总结
  5. Android(安卓)GPS 定位的实现(1)
  6. Android20_广播机制(一)
  7. android stuido的aar文件怎么使用
  8. Android Recovery
  9. Android——AndroidStudio配置NDK步骤
  10. android 语言定制