封装一个流水号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 ...
最新文章
- 利用XML实现通用WEB报表打印(转载)
- NHibernate VS .NET Type VS DbType 的类型映射关系
- OC 知识:彻底理解 iOS 内存管理(MRC、ARC)
- 【线上分享】边缘计算与云原生架构应用及实践解析
- c#winform演练 ktv项目 通过下标选中歌曲并且列表高亮
- HTTP Error 500.19 – Internal Server Error – 0x80070021 (IIS 8.5)
- 解决jupyter notebook输出显示不完整问题
- 计算机网络透明网桥的算法,网基课程设计曼切斯特编码模拟透明网桥自习域转发帧算法模拟IP分片模拟.doc...
- 从零实现深度学习框架——深入浅出交叉熵
- 【渝粤教育】电大中专电商运营实操 (16)作业 题库
- 拓端tecdat|R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测
- 本科三级专业目录计算机类,大学本科专业目录
- pythonnumpy官网_NumPy下载-NumPy(Python开发工具)下载 v1.19.4官方版--pc6下载站
- 研究生毕业做软件测试,毕业研究生,转学软件测试月薪11K,会做选择的人生到底有多赚?...
- Vue中变量前加...三个点什么意思
- Vue.js删除子组件数据显示异常,重新销毁创建子组件
- 【Hexo搭建个人博客】:yilia主题配置(三) - 评论系统
- 草料二维码提交数据自动通知企业微信
- 工作站(集群)使用说明及相关工具
- git下载,上传代码到GitLab ; Untracked files (use “git add <file>...“ to include in what will be committed)
热门文章
- 理论加实践,终于把时间序列预测ARIMA模型讲明白了
- 【Python】简约而不简单|值得收藏的Numpy小抄表(含主要语法、代码)
- 推荐算法炼丹笔记:非采样的负样本
- 技术系列课回顾 | 直播点播窄带高清之 JND 感知编码技术
- 【独家揭秘】如何获得60万开发者信任?
- 匿名电子病例信息不全?深度学习能更好的判断出种族(代码开源)
- NYOJ 927 The partial sum problem 【DFS】+【剪枝】
- PostgreSQL csvlog 源码分析
- mysql max_allowed_packet 查询和修改
- 六个iPhone6不会火爆的理由