Spring Boot集成全局唯一ID生成器 UidGenerator

阅读文本大概需要3分钟。

Spring Boot集成全局唯一ID生成器 UidGenerator_第1张图片

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

Snowflake仓库

https://github.com/twitter/snowflake

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

UidGenerator仓库

https://github.com/baidu/uid-generator

UidGenerator中文文档

https://github.com/baidu/uid-generator/blob/master/README.zh_cn.md

0x01:先在 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
        

    

0x02: application.properties配置文件中添加配置(主要是 MySQL和 MyBatis配置)

server.port=9999

spring.datasource.url=jdbc:mysql://xxx.xxx.xxx.xxx:3306/xxx?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=xxx
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.configuration.map-underscore-to-camel-case=true

0x03:创建数据库表

运行sql脚本以导入表WORKER_NODE, 脚本如下

DROP DATABASE IF EXISTS `xxxx`;
CREATE DATABASE `xxxx` ;
use `xxxx`;
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;

0x04:Spring配置

提供了两种生成器: DefaultUidGenerator、CachedUidGenerator。如对UID生成性能有要求, 请使用CachedUidGenerator

对应Spring配置分别为: default-uid-spring.xml、cached-uid-spring.xml

DefaultUidGenerator配置



    

    
    
    
    
    




CachedUidGenerator配置



    

    
    
    
    
    
    

    
    
    

    
    
    
    

    
    
    

    
    
    

    
    
    





Mybatis配置,mybatis-spring.xml配置说明如下:





    
    






    




    
    
    




    
    
    
    
    



    
    
    
    
    
    
    
    
    
    
    
    
    
    



    
    

0x05:测试

@Resource
private UidGenerator uidGenerator;

@Test
public void testSerialGenerate() {
    // Generate UID
    long uid = uidGenerator.getUID();

    // Parse UID into [Timestamp, WorkerId, Sequence]
    // {"UID":"180363646902239241","parsed":{    "timestamp":"2017-01-19 12:15:46",    "workerId":"4",    "sequence":"9"        }}
    System.out.println(uidGenerator.parseUID(uid));

}

往期精彩

01 漫谈发版哪些事,好课程推荐

02 Linux的常用最危险的命令

03 精讲Spring Boot—入门+进阶+实例

04 优秀的Java程序员必须了解的GC哪些

05 互联网支付系统整体架构详解

关注我

每天进步一点点

Spring Boot集成全局唯一ID生成器 UidGenerator_第2张图片

很干!在看吗?

你可能感兴趣的:(Spring Boot集成全局唯一ID生成器 UidGenerator)