javascript
搞定全局ID生成器:SpringBoot2.x 集成百度 uidgenerator
作者:風.foxwho
foxwho.blog.csdn.net/article/details/90200602
因為升級 使用springboot2.x java 11 的關系,根據官方文檔和網上其他作者配置的怎么也配置不成功,最后自己一步一步升級引入依賴,修改增加接口注入來源,最后成功。
升級成功后的源碼地址
https://github.com/foxiswho/java-spring-boot-uid-generator-baidu
部分升級說明
這里的升級,是升級 官方 代碼依賴
官方代碼地址:https://github.com/baidu/uid-generator
升級spring boot 版本:2.0.7.RELEASE
升級 mybatis,mybatis-spring 版本
升級 mysql-connector-java 版本:8.0.12
升級 junit 版本
創建數據庫存
導入官網數據庫SQL
https://github.com/baidu/uid-generator/blob/master/src/main/scripts/WORKER_NODE.sql
也就是一張表
我這里是在demo庫中,創建了這張表
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;如果報錯,基本上是時間問題,因為mysql 低版本控制比較嚴格,解決方法有多種方式
方式一:
直接把TIMESTAMP改成DATETIME 即可
方式二:
執行SQL 語句前先執行:
set?sql_mode="NO_ENGINE_SUBSTITUTION";mysql 配置信息更改
因為升級到8.x ,配置文件部分也要跟著修改
uid-generator 下,測試文件夾下的資源包uid/mysql.properties
以下修改為
mysql.driver=com.mysql.cj.jdbc.Driver修改完成后,配置好數據庫相關參數,這樣單元測試即可執行成功
案例
計劃將全局生成唯一ID作為一個服務提供者,供其他微服務使用調用
這里創建了一個項目,項目中包含兩個子項目一個是uid-generator官方本身,當然你也可以不需要放到本項目中,直接使用官方的自行打包即可,一個是uid-provider 服務提供者
以下說明的主要是服務提供者
創建 子項目 uid-provider
POM配置文件如下
<?xml?version="1.0"?encoding="UTF-8"?> <project?xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0?http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>java-spring-boot-uid-generator-baidu</artifactId><groupId>com.foxwho.demo</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>uid-provider</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version></dependency><!--for?Mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope><version>8.0.12</version></dependency><!--?druid?--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.16</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version><optional>true</optional></dependency><dependency><groupId>com.foxwho.demo</groupId><artifactId>uid-generator</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies> </project>復制 mapper
先在uid-provider項目資源包路徑下創建mapper文件夾,然后到官方uid-generator資源包路徑下META-INF/mybatis/mapper/WORKER_NODE.xml 復制WORKER_NODE.xml文件,粘貼到該文件夾mapper內
cache id 配置文件
先在uid-provider項目資源包路徑下創建uid文件夾,然后到官方uid-generator 測試 [注意:這里是測試資源包] 資源包路徑下uid/cached-uid-spring.xml 復制cached-uid-spring.xml文件,粘貼到該文件夾uid內
最后根據需要 配置參數,可以看官方說明
創建 spring boot 啟動入口
主要就是加上注解@MapperScan("com.baidu.fsg.uid")讓mybatis能掃描到Mapper類的包的路徑
package?com.foxwho.demo;import?org.mybatis.spring.annotation.MapperScan; import?org.springframework.boot.autoconfigure.SpringBootApplication; import?org.springframework.boot.builder.SpringApplicationBuilder;@SpringBootApplication @MapperScan("com.baidu.fsg.uid") public?class?ConsumerApplication?{public?static?void?main(String[]?args)?{new?SpringApplicationBuilder(ConsumerApplication.class).run(args);} }創建配置
package?com.foxwho.demo.config;import?org.springframework.context.annotation.Configuration; import?org.springframework.context.annotation.ImportResource;@Configuration @ImportResource(locations?=?{?"classpath:uid/cached-uid-spring.xml"?}) public?class?UidConfig?{ }創建服務接口
package?com.foxwho.demo.service;import?com.baidu.fsg.uid.UidGenerator; import?org.springframework.stereotype.Service;import?javax.annotation.Resource;@Service public?class?UidGenService?{@Resource(name?=?"cachedUidGenerator")private?UidGenerator?uidGenerator;public?long?getUid()?{return?uidGenerator.getUID();} }主要說明一下@Resource(name = "cachedUidGenerator") 以往錯誤都是少了這里,沒有標明注入來源
控制器
package?com.foxwho.demo.controller;import?com.foxwho.demo.service.UidGenService; import?org.springframework.beans.factory.annotation.Autowired; import?org.springframework.web.bind.annotation.GetMapping; import?org.springframework.web.bind.annotation.RestController;@RestController public?class?UidController?{@Autowiredprivate?UidGenService?uidGenService;@GetMapping("/uidGenerator")public?String?UidGenerator()?{return?String.valueOf(uidGenService.getUid());}@GetMapping("/")public?String?index()?{return?"index";} }項目配置文件
server.port=8080spring.datasource.url=jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=utf-8&useSSL=false spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Drivermybatis.mapper-locations=classpath:mapper/*.xml mybatis.configuration.map-underscore-to-camel-case=true啟動項目
從啟動入口,啟動
訪問瀏覽器
http://localhost:8080/uidGenerator
頁面輸出
13128615512260612
推薦文章2021 最新版 Spring Boot 速記教程
2W 字你全面認識 Nginx
47K Star 的SpringBoot+MyBatis+docker電商項目,附帶超詳細的文檔!
寫博客能月入10K?
一款基于 Spring Boot 的現代化社區(論壇/問答/社交網絡/博客)
這或許是最美的Vue+Element開源后臺管理UI
推薦一款高顏值的 Spring Boot 快速開發框架
一款基于 Spring Boot 的現代化社區(論壇/問答/社交網絡/博客)
13K點贊都基于 Vue+Spring 前后端分離管理系統ELAdmin,大愛
想接私活時薪再翻一倍,建議根據這幾個開源的SpringBoot項目
總結
以上是生活随笔為你收集整理的搞定全局ID生成器:SpringBoot2.x 集成百度 uidgenerator的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推荐一波腾讯专家的技术书单,请收下!
- 下一篇: SpringBoot动态生成多个Exce