千家信息网

Spring Boot工程集成全局唯一ID生成器UidGenerator的示例分析

发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,小编给大家分享一下Spring Boot工程集成全局唯一ID生成器UidGenerator的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面
千家信息网最后更新 2025年01月16日Spring Boot工程集成全局唯一ID生成器UidGenerator的示例分析

小编给大家分享一下Spring Boot工程集成全局唯一ID生成器UidGenerator的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

Spring Boot中全局唯一流水号ID生成器集成实验

概述

流水号生成器(全局唯一 ID生成器)是服务化系统的基础设施,其在保障系统的正确运行和高可用方面发挥着重要作用。而关于流水号生成算法首屈一指的当属 Snowflake 雪花算法,然而 Snowflake本身很难在现实项目中直接使用,因此实际应用时需要一种可落地的方案。

UidGenerator 由百度开发,是Java实现的, 基于 Snowflake算法的唯一ID生成器。UidGenerator以组件形式工作在应用项目中, 支持自定义workerId位数和初始化策略, 从而适用于 docker等虚拟化环境下实例自动重启、漂移等场景。

本文就在项目中来集成 UidGenerator这一工程来作为项目的全局唯一 ID生成器。

本文内容脑图如下:

基础工程创建

只需创建一个 Multi-Moudule的 Maven项目即可,然后我们集成进两个 Module:

  • uid-generator : 源码在此

  • uid-consumer :消费者( 使用uid-generator产生全局唯一的流水号 )

uid-generator 模块我就不多说了,源码拿过来即可,无需任何改动;而关于 uid-consumer 模块,先在 pom.xml中添加相关依赖如下:

      org.springframework.boot    spring-boot-starter-web        org.springframework.boot    spring-boot-starter-test    test        org.mybatis.spring.boot    mybatis-spring-boot-starter    1.3.2          mysql    mysql-connector-java    runtime    8.0.12          com.alibaba    druid-spring-boot-starter    1.1.9          cn.codesheep    uid-generator    1.0  

然后在 application.properties配置文件中添加一些配置(主要是 MySQL和 MyBatis配置)

server.port=9999spring.datasource.url=jdbc:mysql://xxx.xxx.xxx.xxx:3306/xxx?useUnicode=true&characterEncoding=utf-8&useSSL=falsespring.datasource.username=rootspring.datasource.password=xxxspring.datasource.driver-class-name=com.mysql.jdbc.Drivermybatis.mapper-locations=classpath:mapper/*.xmlmybatis.configuration.map-underscore-to-camel-case=true

完成之后工程缩影如下图所示:

下面我们来一步步集成 UidGenerator 的源码。

数据库建表

首先去 MySQL数据库中建一个名为 WORKER_NODE 的数据表,其 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;

Spring详细配置

CachedUidGenerator 配置

UidGenerator 有两个具体的实现类,分别是 DefaultUidGenerator 和 CachedUidGenerator ,不过官方也推荐了对于性能比较敏感的项目应使用后者,因此本文也使用 CachedUidGenerator ,而对于 DefaultUidGenerator 不做过多阐述。

我们引入 UidGenerator源码中的 cached-uid-spring.xml 文件,里面都是默认配置,我目前没有做任何修改

                                 

Mybatis Mapper XML 配置

即原样引入 UidGenerator源码中关于工作节点(Worker Node)操作的 mapper xml 文件: WORKER_NODE.xml ,其内容如下:

           INSERT INTO WORKER_NODE (HOST_NAME, PORT, TYPE, LAUNCH_DATE, MODIFIED, CREATED) VALUES ( #{hostName}, #{port}, #{type}, #{launchDate}, NOW(), NOW())  

编写业务代码

config 类创建与配置

新建 UidConfig 类,为我们引入上文的 cached-uid-spring.xml 配置

@Configuration@ImportResource(locations = { "classpath:uid/cached-uid-spring.xml" })public class UidConfig {}

service 类创建与配置

新建 UidGenService ,引入 UidGenerator 生成 UID的业务接口

@Servicepublic class UidGenService {  @Resource  private UidGenerator uidGenerator;  public long getUid() {    return uidGenerator.getUID();  }}

controller 创建与配置

新建 UidTestController ,目的是方便我们用浏览器测试接口并观察效果:

@RestControllerpublic class UidTestController {  @Autowired  private UidGenService uidGenService;  @GetMapping("/testuid")  public String test() {    return String.valueOf( uidGenService.getUid() );  }}

实验测试

我们每启动一次 Spring Boot工程,其即会自动去 MySQL数据的 WORKER_NODE 表中插入一行关于工作节点的记录,类似下图所示:

接下来我们浏览器访问: http://localhost:9999/testuid

OK,全局唯一流水号ID已经成功生成并返回!

以上是"Spring Boot工程集成全局唯一ID生成器UidGenerator的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

配置 生成 全局 生成器 工程 项目 流水 流水号 源码 内容 数据 文件 算法 篇文章 工作 示例 分析 业务 两个 基础 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 石家庄邮储银行软件开发年薪 大华人脸识别服务器 数字化智慧园区软件开发 上海泽众软件开发中心 数据库详细知识点 软件开发行业的受控文件 中学生如何提高网络安全 云南时间同步服务器虚拟主机 打开储量数据库没反应 数据库原理及应用前三章知识点 石家庄蓝点网络技术服务中心 数据库数字转换函数 网络安全隐患的手抄报 网吧电影服务器怎么下载电影 威尼特互联网科技 网络安全设备有哪八个方面 类风关基因数据库 杭州直播软件开发前十名 无锡固定资产管理软件开发 广东市润丰网络技术有限公司 吉林现代化软件开发价格走势 网络安全和计算机网络 软件开发培训费用要多少 软件开发过程要写哪些文档 用excel怎么打开数据库 内蒙古网络软件开发诚信服务 软件开发界面菜单布局 专业批发服务器 科技公司软件开发有那些 各种网络场合使用的网络技术
0