分库分表实战(基本玩法)—— (难度:简单,等级:1)

DBC 1K 0
温馨提示

本大模块难度级别为:无、简单、低、一般、中、较高、高

一、添加依赖

博主精品——Sharding-JDBC分库分表实战(4库32表)!

2年前 (2022-07-12) 0
分库分表实战(基本玩法)—— (难度:简单,等级:1)插图

二、配置文件的编写

点击查看完整内容
温馨提示

自己改成对应自己的密码即可

三、避免生成的雪花id重复,自定义workId

package net.dbc.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;

import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 * @author DBC
 * @version 1.0.0
 * @date 2022年10月08日 21:56:14
 * @website dbc655.top
 */
@Configuration
@Slf4j
public class SnowFlakeWordIdConfig {


    /**
     * 动态指定sharding jdbc 的雪花算法中的属性work.id属性
     * 通过调用System.setProperty()的方式实现,可用容器的 id 或者机器标识位
     * workId最大值 1L << 100,就是1024,即 0<= workId < 1024
     * {@link SnowflakeShardingKeyGenerator#getWorkerId()}
     *
     */
    static {

        try {
            InetAddress inetAddress = Inet4Address.getLocalHost();

            String hostAddressIp = inetAddress.getHostAddress();

            String workId = Math.abs(hostAddressIp.hashCode()) % 1024 + "";

            System.setProperty("workId", workId);

            log.info("workId:{}", workId);

        } catch (UnknownHostException e) {
            e.printStackTrace();
        }


    }
}

//    public static void main(String [] args){
//
//        InetAddress inetAddress = null;
//        try {
//            inetAddress = Inet4Address.getLocalHost();
//        } catch (UnknownHostException e) {
//            e.printStackTrace();
//        }
//        System.out.println(inetAddress.getHostAddress());
//        System.out.println(inetAddress.getHostName());
//
//    }

可以看到对应的workId

分库分表实战(基本玩法)—— (难度:简单,等级:1)插图2

封装自己的雪花ID生成工具类

package net.dbc.utils;
import org.apache.shardingsphere.core.strategy.keygen.SnowflakeShardingKeyGenerator;
/**
 * @author DBC
 * @version 1.0.0
 * @date 2022年10月08日 22:08:54
 * @website dbc655.top
 */
public class IDUtil {


    private static SnowflakeShardingKeyGenerator shardingKeyGenerator = new SnowflakeShardingKeyGenerator();

    /**
     * 雪花算法生成器
     * @return
     */
    public static   Comparable<?> geneSnowFlakeID(){

        return shardingKeyGenerator.generateKey();
    }

}

简单的使用

        // 生成唯一id
        accountDO.setAccountNo(Long.valueOf(IDUtil.geneSnowFlakeID().toString()));

发表评论 取消回复
表情 图片 链接 代码

分享