封装一个流水号ID生成器:id-spring-boot-starter
文章转载自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());}
}
怎么样,用法超级简单吧:
- 首先用
Autowired
的方式引入UidGenService
类; - 直接调用
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相关推荐
- 一个简易上手的短信服务Spring Boot Starter,连傻瓜都会!
作 者:jackieonway 来 源:jianshu.com/u/36510c75d37c 短信服务在用户注册.登录.找回密码等相关操作中,可以让用户使用更加便捷,越来越多的公司都采用短信验证的方式 ...
- 一个项目有两个pom_实现一个Spring Boot Starter超简单,读 Starter 源码也不在话下...
Spring Boot 对比 Spring MVC 最大的优点就是使用简单,约定大于配置.不会像之前用 Spring MVC 的时候,时不时被 xml 配置文件搞的晕头转向,冷不防还因为 xml 配置 ...
- 快速开发一个自定义 Spring Boot Starter ,希望你也会
来源:http://t.cn/Ai9li9fC 众所周知,Spring Boot由众多Starter组成,随着版本的推移Starter家族成员也与日俱增.在传统Maven项目中通常将一些层.组件拆分为 ...
- 实现一个 Spring Boot Starter 原来如此简单,读 Starter 源码也不在话下
我是风筝,公众号「古时的风筝」,一个在程序圈混迹多年,主业 Java,另外 Python.React 也玩儿的 6 的斜杠开发者.现已转行程序员鼓励师 Spring Cloud 系列文章已经完成,可以 ...
- 自定义 Spring Boot Starter
一.引言 什么是Spring Boot Starter呢?我们直接来看看官网是怎么介绍的吧. Starters are a set of convenient dependency descripto ...
- 手把手教你定制标准 Spring Boot starter
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 写在前面 我们每次构建一个 Spring 应用程序时,我 ...
- 自定义依赖注解无效_最详细的自定义Spring Boot Starter开发教程
1.前言 随着Spring的日渐臃肿,为了简化配置.开箱即用.快速集成,Spring Boot 横空出世.目前已经成为 Java 目前最火热的框架了.平常我们用Spring Boot开发web应用.S ...
- 《SpringCloud超级入门》Spring Boot Starter的介绍及使用《七》
目录 Spring Boot Starter项目创建 自动创建客户端 使用 Starter 使用注解开启 Starter 自动构建 使用配置开启 Starter 自动构建 配置 Starter 内容提 ...
- Spring boot starter
1:Spring boot starter及项目中的类似运用 1:Spring boot starter的两种方式 引入pom文件,自动管理jar版本 根据spring.factories配置文件,加 ...
- Spring Boot Starter 常用列表
文章目录 1.美图 2.常用列表 3.源码中的starters 1.美图 2.常用列表 以下为常⽤用的 Spring Boot Starter 列列表. 名称 描述 Pom spring-boot-s ...
最新文章
- 优达学城《DeepLearning》大纲和学习愿景
- Delphi中预想不到的代码楼主zswang(伴水清清)(专家门诊清洁工)2002-05-16 14:20:38 在 Delphi / VCL组件开发及应用 提问
- gdi画平滑直线_石膏几何体不会画?那是你没有画过这些,学会画石膏很简单,收藏...
- CSS设计指南(读书笔记 - 背景)
- 2021年宝鸡中学高考成绩查询,宝鸡中学排名前十名,2021年宝鸡中学排名一览表
- 如何用matlaab把csv转为mat文件_如何编辑pdf文档?看大神们是如何操作的
- uva 11892 - ENimEN(推理)
- jQuery实现点击显示和隐藏内容
- Kindle 3---原系统下的字典的使用
- 【应用随机过程】06. 布朗运动
- 电子工程师的自我修养 - 20例电路讲解
- 2.4G无线收发器SI24R1低成本替代CI24R1
- Python四舍五入保留两位小数
- EasyPlayer流媒体播放器播放HLS视频,起播速度慢的技术优化
- 读后感--《万物简史》
- 苹果手机如何深度清理_苹果手机还可以这样清理垃圾,怪不得用这么久还流畅如丝...
- 七夕表白攻略:原来数学才是世界上最浪漫的学科!
- python公开课模块_Course2-Python函数和模块
- Python取多维数组第n维的前几位
- java导出excel 复杂的 合并单元格
热门文章
- 【深度学习】这千层transformer让我目瞪口呆
- 【NLP】FedNLP: 首个联邦学习赋能NLP的开源框架,NLP迈向分布式新时代
- (赞助5本)谷歌官方推荐的 TensorFlow 2 “豹书”来了!
- 【数学基础】算法工程师必备的机器学习--线性模型(上)
- 万字长文带你一览ICLR2020最新Transformers进展(下)
- 【算法知识】详解基数排序算法
- 如何只使用标签来构建一个简单的电影推荐系统
- 当推荐系统遇上用户画像:你的画像是怎么来的?
- 互联网1分钟 | 0328 阿里巴巴收购企业协作软件Teambition;完美世界:与谷歌达成战略合作,积极探索VR等新游戏类型...
- 不同测试阶段,不同测试类型的区别于联系