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工具箱2 分钟前
每天40分玩转Django:Django表单
数据库·后端·python·django
庸不易17 分钟前
Spring Data
java·后端·spring
全职计算机毕业设计28 分钟前
基于微信小程序的短视频系统(SpringBoot)+文档
spring boot·微信小程序·音视频
-self-disciplinese43 分钟前
从零开始学Java,学习笔记Day24
java·笔记·后端·学习
醉殇姒若梦遗年1 小时前
怎么在idea中创建springboot项目
java·spring boot·idea·项目·创建
赵利伟@1 小时前
springboot 配置logback-spring.xml,配置日志只保留7天数据,滚动更新
spring boot·spring·logback
_院长大人_1 小时前
Springboot logback 日志打印配置文件,每个日志文件100M,之后滚动到下一个日志文件,日志保留30天(包含traceid)
spring boot·logback
m0_748238921 小时前
web网页端使用webSocket实现语音通话功能(SpringBoot+VUE)
前端·spring boot·websocket
jjw_zyfx2 小时前
flask_socketio 以继承 Namespace方式实现一个网页聊天应用
后端·python·flask
唐家小妹2 小时前
如何从0构建一个flask项目,直接上实操!!!
前端·后端·python·flask