文章转载自https://www.codesheep.cn/2019/09/04/id-springbt-starter/

概述

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

UidGenerator正是百度开源的一款基于Snowflake雪花算法实现的高性能唯一ID生成器。在本号前文中已经详细使用过UidGenerator,但使用过程还是比较繁杂,还需要自己去引UidGenerator组件的源码,感觉有点不方便。为此本文基于UidGenerator,再来封装一套更利于Spring Boot项目使用的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 {@Autowiredprivate 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源码下载

需要组件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号生成一般属于系统基础服务,因此可以独立成一个微服务,供其他微服务调用

封装一个流水号ID生成器:id-spring-boot-starter相关推荐

  1. 一个简易上手的短信服务Spring Boot Starter,连傻瓜都会!

    作 者:jackieonway 来 源:jianshu.com/u/36510c75d37c 短信服务在用户注册.登录.找回密码等相关操作中,可以让用户使用更加便捷,越来越多的公司都采用短信验证的方式 ...

  2. 一个项目有两个pom_实现一个Spring Boot Starter超简单,读 Starter 源码也不在话下...

    Spring Boot 对比 Spring MVC 最大的优点就是使用简单,约定大于配置.不会像之前用 Spring MVC 的时候,时不时被 xml 配置文件搞的晕头转向,冷不防还因为 xml 配置 ...

  3. 快速开发一个自定义 Spring Boot Starter ,希望你也会

    来源:http://t.cn/Ai9li9fC 众所周知,Spring Boot由众多Starter组成,随着版本的推移Starter家族成员也与日俱增.在传统Maven项目中通常将一些层.组件拆分为 ...

  4. 实现一个 Spring Boot Starter 原来如此简单,读 Starter 源码也不在话下

    我是风筝,公众号「古时的风筝」,一个在程序圈混迹多年,主业 Java,另外 Python.React 也玩儿的 6 的斜杠开发者.现已转行程序员鼓励师 Spring Cloud 系列文章已经完成,可以 ...

  5. 自定义 Spring Boot Starter

    一.引言 什么是Spring Boot Starter呢?我们直接来看看官网是怎么介绍的吧. Starters are a set of convenient dependency descripto ...

  6. 手把手教你定制标准 Spring Boot starter

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 写在前面 我们每次构建一个 Spring 应用程序时,我 ...

  7. 自定义依赖注解无效_最详细的自定义Spring Boot Starter开发教程

    1.前言 随着Spring的日渐臃肿,为了简化配置.开箱即用.快速集成,Spring Boot 横空出世.目前已经成为 Java 目前最火热的框架了.平常我们用Spring Boot开发web应用.S ...

  8. 《SpringCloud超级入门》Spring Boot Starter的介绍及使用《七》

    目录 Spring Boot Starter项目创建 自动创建客户端 使用 Starter 使用注解开启 Starter 自动构建 使用配置开启 Starter 自动构建 配置 Starter 内容提 ...

  9. Spring boot starter

    1:Spring boot starter及项目中的类似运用 1:Spring boot starter的两种方式 引入pom文件,自动管理jar版本 根据spring.factories配置文件,加 ...

  10. Spring Boot Starter 常用列表

    文章目录 1.美图 2.常用列表 3.源码中的starters 1.美图 2.常用列表 以下为常⽤用的 Spring Boot Starter 列列表. 名称 描述 Pom spring-boot-s ...

最新文章

  1. 优达学城《DeepLearning》大纲和学习愿景
  2. Delphi中预想不到的代码楼主zswang(伴水清清)(专家门诊清洁工)2002-05-16 14:20:38 在 Delphi / VCL组件开发及应用 提问
  3. gdi画平滑直线_石膏几何体不会画?那是你没有画过这些,学会画石膏很简单,收藏...
  4. CSS设计指南(读书笔记 - 背景)
  5. 2021年宝鸡中学高考成绩查询,宝鸡中学排名前十名,2021年宝鸡中学排名一览表
  6. 如何用matlaab把csv转为mat文件_如何编辑pdf文档?看大神们是如何操作的
  7. uva 11892 - ENimEN(推理)
  8. jQuery实现点击显示和隐藏内容
  9. Kindle 3---原系统下的字典的使用
  10. 【应用随机过程】06. 布朗运动
  11. 电子工程师的自我修养 - 20例电路讲解
  12. 2.4G无线收发器SI24R1低成本替代CI24R1
  13. Python四舍五入保留两位小数
  14. EasyPlayer流媒体播放器播放HLS视频,起播速度慢的技术优化
  15. 读后感--《万物简史》
  16. 苹果手机如何深度清理_苹果手机还可以这样清理垃圾,怪不得用这么久还流畅如丝...
  17. 七夕表白攻略:原来数学才是世界上最浪漫的学科!
  18. python公开课模块_Course2-Python函数和模块
  19. Python取多维数组第n维的前几位
  20. java导出excel 复杂的 合并单元格

热门文章

  1. 【深度学习】这千层transformer让我目瞪口呆
  2. 【NLP】FedNLP: 首个联邦学习赋能NLP的开源框架,NLP迈向分布式新时代
  3. (赞助5本)谷歌官方推荐的 TensorFlow 2 “豹书”来了!
  4. 【数学基础】算法工程师必备的机器学习--线性模型(上)
  5. 万字长文带你一览ICLR2020最新Transformers进展(下)
  6. 【算法知识】详解基数排序算法
  7. 如何只使用标签来构建一个简单的电影推荐系统
  8. 当推荐系统遇上用户画像:你的画像是怎么来的?
  9. 互联网1分钟 | 0328 阿里巴巴收购企业协作软件Teambition;完美世界:与谷歌达成战略合作,积极探索VR等新游戏类型...
  10. 不同测试阶段,不同测试类型的区别于联系