1. 程式人生 > >Spring Boot教你一種方法生成全域性唯一ID

Spring Boot教你一種方法生成全域性唯一ID

一、概述

流水號生成器(全域性唯一 ID生成器)是服務化系統的基礎設施,其在保障系統的正確執行和高可用方面發揮著重要作用。而關於流水號生成演算法首屈一指的當屬 Snowflake雪花演算法,然而 Snowflake本身很難在現實專案中直接使用,因此實際應用時需要一種可落地的方案。

UidGenerator 由百度開發,是Java實現的, 基於 Snowflake演算法的唯一ID生成器。UidGenerator以元件形式工作在應用專案中, 支援自定義workerId位數和初始化策略, 從而適用於 docker等虛擬化環境下例項自動重啟、漂移等場景。

本文就在專案中來整合 UidGenerator這一工程來作為專案的全域性唯一 ID生成器。

二、基礎工程建立

只需建立一個 Multi-Moudule的 Maven專案即可,然後我們整合進兩個 Module:

uid-generator

github.com/baidu/uid-generator

uid-consumer:消費者

使用uid-generator產生全域性唯一的流水號

uid-generator模組我就不多說了,原始碼拿過來即可,無需任何改動;而關於 uid-consumer模組,先在 pom.xml中新增相關依賴如下:

然後在 application.properties配置檔案中新增一些配置(主要是 MySQL和 MyBatis配置)

完成之後工程縮影如下圖所示:

下面我們來一步步整合 UidGenerator的原始碼。

三、資料庫建表

首先去 MySQL資料庫中建一個名為 WORKER_NODE的資料表,其 sql如下:

四、Spring詳細配置

4.1、CachedUidGenerator 配置

UidGenerator 有兩個具體的實現類,分別是 DefaultUidGenerator 和 CachedUidGenerator,不過官方也推薦了對於效能比較敏感的專案應使用後者,因此本文也使用 CachedUidGenerator,而對於 DefaultUidGenerator不做過多闡述。

我們引入UidGenerator原始碼中的cached-uid-spring.xml檔案,裡面都是預設配置,我目前沒有做任何修改:

4.2、Mybatis Mapper XML 配置

即原樣引入 UidGenerator原始碼中關於工作節點(Worker Node)操作的 mapper xml 檔案: WORKER_NODE.xml,其內容如下:

五、編寫業務程式碼

5.1、config 類建立與配置

新建 UidConfig類,為我們引入上文的 cached-uid-spring.xml配置

5.2、service 類建立與配置

新建 UidGenService,引入 UidGenerator 生成 UID的業務介面:

5.3、controller 建立與配置

新建 UidTestController,目的是方便我們用瀏覽器測試介面並觀察效果:

六、實驗測試

我們每啟動一次 Spring Boot工程,其即會自動去 MySQL資料的 WORKER_NODE表中插入一行關於工作節點的記錄,類似下圖所示:

接下來我們瀏覽器訪問:

OK,全域性唯一流水號ID已經成功生成並返回!

擴充套件閱讀

Spring Boot 配置隨機數那些小技巧

Spring MVC 到 Spring BOOT的簡化之路

教你十分鐘構建好 SpringBoot + SSM 框架

來源:http://www.codesheep.cn/2018/10/24/springbt-uid-generator/

微信公眾號:javafirst

掃碼關注免費獲取更多資源