当前位置: 首页 > article >正文

springboot分布式id,基于snowflake的分布式统一id生成工具

如不设置表自增长,那么此处唯一id可设置 IdType.ASSIGN_ID,单机版用mybatis默认的雪花算法IdentifierGenerator 即可,集群版推荐使用zookeeper,snowflake的分布式统一ID生成工具idworker .

<!--pom添加包idworker-->  
<dependency>
            <groupId>com.imadcn.framework</groupId>
            <artifactId>idworker</artifactId>
            <version>1.6.0</version>
            <exclusions>
                <exclusion>
                    <artifactId>curator-client</artifactId>
                    <groupId>org.apache.curator</groupId>
                </exclusion>
            </exclusions>
        </dependency>
package com.cn.dydatasource;

import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator;
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
import com.baomidou.mybatisplus.core.incrementer.ImadcnIdentifierGenerator;
import com.github.pagehelper.util.StringUtil;
import com.imadcn.framework.idworker.config.ApplicationConfiguration;
import com.imadcn.framework.idworker.config.ZookeeperConfiguration;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 分布式id问题
 */
@Configuration()
@ConfigurationProperties(prefix = "mybatis-plus.zookeeper")
public class MybatisConfig {
    private String serverLists;

    public String getServerLists() {
        return serverLists;
    }

    public void setServerLists(String serverLists) {
        this.serverLists = serverLists;
    }


    //zookeeper 解决分布式id重复问题
    //默认是 根据ip来进行 增长的 如果ip相同  同一台机器 生成的id是不会重复的  所以同一个业务写入集部署情况 应放置在不同的服务器


    @Bean
    public IdentifierGenerator idGenerator() {
        if(!StringUtil.isEmpty(serverLists)){
            ZookeeperConfiguration zkConfig = new ZookeeperConfiguration();
            zkConfig.setServerLists(serverLists);
            zkConfig.setSessionTimeoutMilliseconds(3000);
            ApplicationConfiguration applicationConfiguration=new ApplicationConfiguration();
            applicationConfiguration.setSerialize("fastjson");
            return new ImadcnIdentifierGenerator(zkConfig,applicationConfiguration);
        }
        return  new DefaultIdentifierGenerator();
    }



}

注:application.yml中需添加zookeeper配置 


http://www.kler.cn/a/449349.html

相关文章:

  • 链接数据Linked Data的深层解读
  • Retrofit源码分析:动态代理获取Api接口实例,解析注解生成request,线程切换
  • ECharts关系图-关系图11,附视频讲解与代码下载
  • 独一无二,万字详谈——Linux之文件管理
  • vscode添加全局宏定义
  • 中地数码亮相2024武汉市数字经济应用场景对接大会
  • 协作机器人做“按摩理疗”,机器人如何感知力度呢?
  • GoCD 持续集成和部署工具配置指南(CentOS 7)
  • Kafka常用集群配置参数
  • 精确与高效:二分查找的完整指南
  • Jenkins引发的多jdk设置问题
  • [AI]解释 Git 的基本概念和使用方式
  • FreeSWITCH的API与APP详解
  • 技术速递|使用 Dependabot 管理 .NET SDK 更新
  • C语言初阶习题【15】猜数字游戏
  • 数字孪生技术在智慧园区管理平台中的应用
  • [AIGC知识] layout理解
  • istio-proxy不打印访问日志怎么解决?
  • 最长公共子序列【东北大学oj数据结构10-3】C++
  • 我的PHP学习之路:经验分享与建议
  • leetcode-15.三数之和-day15(debug中...)
  • 【PythonGui实战】自动摇号小程序
  • 数据结构与算法学习笔记----质数
  • Rocky DEM tutorial6_High pressure grinding roll_高压辊磨机
  • DCDC Buck模式的电感值参数计算
  • 如何高效利用Python爬虫按关键字搜索苏宁商品