文章转载自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. 利用XML实现通用WEB报表打印(转载)
  2. NHibernate VS .NET Type VS DbType 的类型映射关系
  3. OC 知识:彻底理解 iOS 内存管理(MRC、ARC)
  4. 【线上分享】边缘计算与云原生架构应用及实践解析
  5. c#winform演练 ktv项目 通过下标选中歌曲并且列表高亮
  6. HTTP Error 500.19 – Internal Server Error – 0x80070021 (IIS 8.5)
  7. 解决jupyter notebook输出显示不完整问题
  8. 计算机网络透明网桥的算法,网基课程设计曼切斯特编码模拟透明网桥自习域转发帧算法模拟IP分片模拟.doc...
  9. 从零实现深度学习框架——深入浅出交叉熵
  10. 【渝粤教育】电大中专电商运营实操 (16)作业 题库
  11. 拓端tecdat|R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测
  12. 本科三级专业目录计算机类,大学本科专业目录
  13. pythonnumpy官网_NumPy下载-NumPy(Python开发工具)下载 v1.19.4官方版--pc6下载站
  14. 研究生毕业做软件测试,毕业研究生,转学软件测试月薪11K,会做选择的人生到底有多赚?...
  15. Vue中变量前加...三个点什么意思
  16. Vue.js删除子组件数据显示异常,重新销毁创建子组件
  17. 【Hexo搭建个人博客】:yilia主题配置(三) - 评论系统
  18. 草料二维码提交数据自动通知企业微信
  19. 工作站(集群)使用说明及相关工具
  20. git下载,上传代码到GitLab ; Untracked files (use “git add <file>...“ to include in what will be committed)

热门文章

  1. 理论加实践,终于把时间序列预测ARIMA模型讲明白了
  2. 【Python】简约而不简单|值得收藏的Numpy小抄表(含主要语法、代码)
  3. 推荐算法炼丹笔记:非采样的负样本
  4. 技术系列课回顾 | 直播点播窄带高清之 JND 感知编码技术
  5. 【独家揭秘】如何获得60万开发者信任?
  6. 匿名电子病例信息不全?深度学习能更好的判断出种族(代码开源)
  7. NYOJ 927 The partial sum problem 【DFS】+【剪枝】
  8. PostgreSQL csvlog 源码分析
  9. mysql max_allowed_packet 查询和修改
  10. 六个iPhone6不会火爆的理由