<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 10217字,需瀏覽 21分鐘

           ·

          2021-03-10 19:48

          你知道的越多,不知道的就越多,業(yè)余的像一棵小草!

          你來(lái),我們一起精進(jìn)!你不來(lái),我和你的競(jìng)爭(zhēng)對(duì)手一起精進(jìn)!

          編輯:業(yè)余草

          foxwho.blog.csdn.net/article/details/90200602

          推薦:https://www.xttblog.com/?p=5162

          最近有網(wǎng)友給我私信,說(shuō)公司要使用分布式 ID,問(wèn)我有沒(méi)有相關(guān)實(shí)現(xiàn)代碼。我這里找了一個(gè),分享給大家!

          分布式 ID 的生成方案有很多,有的還帶有管理界面。比如下面這個(gè):

          方案雖然有很多,但是這些方案核心思想都很類(lèi)似,我們采用開(kāi)源項(xiàng)目最好要有大廠背景,這樣出了問(wèn)題也能也好的被修復(fù)。今天推薦的這個(gè)源碼項(xiàng)目使用的 Java11,并且 Springboot 使用的是 2.x 的版本。這個(gè)版本的難點(diǎn)是,根據(jù)官方文檔和網(wǎng)上其他作者配置的怎么也配置不成功,最后只能自己一步一步升級(jí)引入依賴(lài),修改增加接口注入來(lái)源,最后成功。

          部分升級(jí)說(shuō)明

          這里的升級(jí),是升級(jí) 官方 代碼依賴(lài)

          官方代碼地址:https://github.com/baidu/uid-generator

          • 升級(jí)spring boot 版本:2.0.7.RELEASE
          • 升級(jí) mybatis,mybatis-spring 版本
          • 升級(jí) mysql-connector-java 版本:8.0.12
          • 升級(jí) junit 版本

          創(chuàng)建數(shù)據(jù)庫(kù)存

          導(dǎo)入官網(wǎng)數(shù)據(jù)庫(kù)SQL

          https://github.com/baidu/uid-generator/blob/master/src/main/scripts/WORKER_NODE.sql

          也就是一張表

          我這里是在demo庫(kù)中,創(chuàng)建了這張表

          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;

          如果報(bào)錯(cuò),基本上是時(shí)間問(wèn)題,因?yàn)閙ysql 低版本控制比較嚴(yán)格,解決方法有多種方式

          方式一:

          直接把TIMESTAMP改成DATETIME 即可

          方式二:

          執(zhí)行SQL 語(yǔ)句前先執(zhí)行:

          set sql_mode="NO_ENGINE_SUBSTITUTION";

          mysql 配置信息更改

          因?yàn)樯?jí)到8.x ,配置文件部分也要跟著修改

          uid-generator 下,測(cè)試文件夾下的資源包uid/mysql.properties

          以下修改為

          mysql.driver=com.mysql.cj.jdbc.Driver

          修改完成后,配置好數(shù)據(jù)庫(kù)相關(guān)參數(shù),這樣單元測(cè)試即可執(zhí)行成功

          案例

          計(jì)劃將全局生成唯一ID作為一個(gè)服務(wù)提供者,供其他微服務(wù)使用調(diào)用

          這里創(chuàng)建了一個(gè)項(xiàng)目,項(xiàng)目中包含兩個(gè)子項(xiàng)目一個(gè)是uid-generator官方本身,當(dāng)然你也可以不需要放到本項(xiàng)目中,直接使用官方的自行打包即可,一個(gè)是uid-provider 服務(wù)提供者

          以下說(shuō)明的主要是服務(wù)提供者

          創(chuàng)建 子項(xiàng)目 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>

          復(fù)制 mapper

          先在uid-provider項(xiàng)目資源包路徑下創(chuàng)建mapper文件夾,然后到官方uid-generator資源包路徑下META-INF/mybatis/mapper/WORKER_NODE.xml 復(fù)制WORKER_NODE.xml文件,粘貼到該文件夾mapper內(nèi)

          cache id 配置文件

          先在uid-provider項(xiàng)目資源包路徑下創(chuàng)建uid文件夾,然后到官方uid-generator 測(cè)試 [注意:這里是測(cè)試資源包] 資源包路徑下uid/cached-uid-spring.xml 復(fù)制cached-uid-spring.xml文件,粘貼到該文件夾uid內(nèi)

          最后根據(jù)需要 配置參數(shù),可以看官方說(shuō)明

          創(chuàng)建 spring boot 啟動(dòng)入口

          主要就是加上注解@MapperScan("com.baidu.fsg.uid")讓mybatis能掃描到Mapper類(lèi)的包的路徑

          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);
              }
          }

          創(chuàng)建配置

          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 {
          }

          創(chuàng)建服務(wù)接口

          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();
              }
          }

          主要說(shuō)明一下@Resource(name = "cachedUidGenerator") 以往錯(cuò)誤都是少了這里,沒(méi)有標(biāo)明注入來(lái)源

          控制器

          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";
              }
          }

          項(xiàng)目配置文件

          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

          啟動(dòng)項(xiàng)目

          從啟動(dòng)入口,啟動(dòng)

          訪問(wèn)瀏覽器

          http://localhost:8080/uidGenerator

          頁(yè)面輸出

          13128615512260612


          最后,需要源碼的可以加我微信:dart996,免費(fèi)獲??!

          瀏覽 89
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品综合久久久久久 | 亚洲婷婷日日综合婷婷噜噜噜 | 久热中文| 九九天堂 | 青青草乱伦电影 |