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

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

java 复制代码
<!--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>
java 复制代码
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配置

相关推荐
舒一笑几秒前
大模型时代的程序员成长悖论:如何在AI辅助下不失去竞争力
后端·程序员·掘金技术征文
lang201509282 分钟前
Spring Boot优雅关闭全解析
java·spring boot·后端
小羊在睡觉1 小时前
golang定时器
开发语言·后端·golang
用户21411832636021 小时前
手把手教你在魔搭跑通 DeepSeek-OCR!光学压缩 + MoE 解码,97% 精度还省 10-20 倍 token
后端
追逐时光者1 小时前
一个基于 .NET 开源、功能强大的分布式微服务开发框架
后端·.net
刘一说1 小时前
Spring Boot 启动慢?启动过程深度解析与优化策略
java·spring boot·后端
壹佰大多2 小时前
【spring如何扫描一个路径下被注解修饰的类】
java·后端·spring
间彧2 小时前
Java双亲委派模型的具体实现原理是什么?
后端
间彧2 小时前
Java类的加载过程
后端
DokiDoki之父2 小时前
Spring—注解开发
java·后端·spring