搞定全局ID生成器:SpringBoot2.x 集成百度 uidgenerator

超全面!Java核心知識總結(點擊查看)

超全面!Java核心知識總結(點擊查看)

作者:風.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

創建數據庫存

導入官網數據庫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(64NOT NULL COMMENT 'host name',
PORT VARCHAR(64NOT 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 {
    @Autowired
    private UidGenService uidGenService;

    @GetMapping("/uidGenerator")
    public String UidGenerator() {
        return String.valueOf(uidGenService.getUid());
    }

    @GetMapping("/")
    public String index() {
        return "index";
    }
}

項目配置文件

server.port=8080

spring.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.Driver

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

啓動項目

從啓動入口,啓動

訪問瀏覽器

http://localhost:8080/uidGenerator

頁面輸出

13128615512260612


如有文章對你有幫助,

在看”和轉發是對我最大的支持!


  
      
      
      
推薦   GitHub  書籍倉庫
https://github.com/ebooklist/awesome-ebooks-list

整理了大部分常用 技術書籍PDF,持續更新中... 你需要的技術書籍,這裏可能都有...


點擊文末“閱讀原文”可直達

整理不易,麻煩各位小夥伴在GitHub中來個Star支持一下

本文分享自微信公衆號 - Java專欄(finishbug)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章