springboot2.x 集成百度 uidgenerator
因为升级 使用springboot2.x java 11 的关系,
根据官方文档和网上其他作者配置的怎么也配置不成功,
最后自己一步一步升级引入依赖,修改增加接口注入来源,最后成功
升级成功后的源码地址 https://github.com/foxiswho/java-spring-boot-uid-generator-baidu
fox.风
部分升级说明
这里的升级,是升级 官方 代码依赖
官方代码地址: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
部分来源:
https://blog.csdn.net/a13794479495/article/details/83541569
https://www.codesheep.cn/2018/10/24/springbt-uid-generator/
springboot2.x 集成百度 uidgenerator相关推荐
- springboot2.x 集成百度 ui-dgenerator生成分布式唯一id
百度的ui-dgenerator也是根据snowflake算法更改的方法,关于snowflake算法不做介绍,不懂的可以百度. snowflake算法有个缺点是:时间回拨问题,官方文档也是抛出异常. ...
- SpringBoot2.0集成百度uid-generator唯一ID生成器,支持zk、redis、数据库进行WORKER ID分配
UidGenerator是百度开源的基于Snowflake算法的唯一ID生成器,使用java语言实现,可在分布式环境下生成单调递增的ID.详情参见: uid-generator 从官网说明或者网上的使 ...
- 搞定全局ID生成器:SpringBoot2.x 集成百度 uidgenerator
点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达 今日推荐:推荐19个github超牛逼项目!个人原创100W +访问量博客:点击前往,查看更多 作者:风.foxwho fo ...
- SpringBoot集成百度uid-generator唯一ID生成器
大家好,我是猿人(猿码天地创始人),今天给码农们或即将成为码农或想成为码农的朋友讲讲SpringBoot集成百度uid-generator唯一ID生成器,现在是深夜23:10分,猿人最擅长熬夜,就是不 ...
- Spring Boot 集成百度 Uidgenerator分布式ID生成器
UidGenerator是Java实现的, 基于Snowflake算法的唯一ID生成器.UidGenerator以组件形式工作在应用项目中, 支持自定义workerId位数和初始化策略, 从而适用于d ...
- 分布式全局唯一id实现-2 springCloud-MyBatis-Plus集成百度分布式全局id(uid-generator)
前言:MyBatis-Plus 集成百度的uid-generator ,实现业务实体在insert 实体时,可以自动获取全局id,完成数据保存: 1 uid-generator 全局id 生成的方式了 ...
- 分布式全局唯一id实现-2.1 springCloud-MyBatis-Plus集成百度分布式全局id(uid-generator)--优化版
前言:在上一篇 springCloud-MyBatis-Plus集成百度分布式全局id, id的生成全部交予程序实现,虽然可以通过集群的方式来提高id 生成服务的高可用性,但是依然需要考虑极端情况,在 ...
- Springboot2.0集成阿里云RocketMQ
介绍 RocketMQ是出自阿里巴巴的一款开源消息中间件,在设计上借鉴了Kafka,2017年成为Apache顶级项目,虽然目前社区无法和Kafka比肩,但其历经多次天猫双十一的考验,其性能和稳定是毋 ...
- SpringBoot笔记:SpringBoot2.3集成SpringSession+nginx+redis实现session共享
文章目录 Spring Session介绍 Redis集成 yml配置 依赖添加 redis存值查看 登录服务器查看redis的值 查询所有"spring:session:"开头的 ...
- android百度导航实现,Android 集成百度地图实现设备定位
Android 集成百度地图实现设备定位 步骤1: 申请android 端SDK : http://lbsyun.baidu.com/ 步骤2: 下载基础版SDK 步骤3: 下载示例程序 步骤4: 开 ...
最新文章
- I.MX6 ar1020 SPI device driver hacking
- GLSL着色语言学习。橙皮书第一个例子GLSL+OpenTK+F#的实现。
- Java实现算法导论中最大公约数欧几里得算法
- OllyDbg 使用笔记 (二)
- simulink积分模块和微分模块区别
- mount: unknown filesystem type 'ntfs'(转载)
- python 编辑数学公式_用python编写数学公式
- leetcood学习笔记-204-计算质数
- 不重复点名抽奖_抽奖新玩法?和平精英蜘蛛异变套装上线 参与十次可获得所有奖励...
- 《spring-boot学习》-12-@controller和@RestController的区别?
- Python之爬虫(七)正则的基本使用
- 几行代码起家到实时音视频一线,6 岁声网计划赴美上市!
- Vue-cli3项目案例
- 人工智能 (特征数据提取)
- 最新北京市生活常用电话一览表
- 机器学习算法对比分析
- win7计算机图标删除,如何彻底删除Win7右下角操作中心的小白旗图标
- FileNotFoundError: [WinError 3] 系统找不到指定的路径。
- php phpstudy虚拟域名配置
- 小米手机Android内存管理基本情况介绍