java雪花_java雪花算法

本文介绍了如何在Java中使用Hutool库的Snowflake类来生成基于雪花算法的唯一ID。通过@Component注解创建了一个IdGeneratorSnowflake工具类,其在初始化时自动获取或设置workerId。此外,还展示了在service层和服务实现层如何调用该工具类,以并发生成多个ID。Hutool是一个全面的Java工具类库,提供了时间戳、图片处理、加密和IP工具等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java工具类

1.IdGeneratorSnowflake.java用于生成雪花算法,分为有参构造和无参构造

package com.sale.util.common;

import cn.hutool.core.lang.Snowflake;

import cn.hutool.core.net.NetUtil;

import cn.hutool.core.util.IdUtil;

import lombok.Data;

import lombok.Synchronized;

import lombok.extern.slf4j.Slf4j;

import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

/**

* @author wjn

* @version 1.0

* @date 2020/12/10 18:13

*/

@Slf4j

@Component

public class IdGeneratorSnowflake {

private long workerId =0;

private long datacenterId=1;

private Snowflake snowflake= IdUtil.createSnowflake(workerId,datacenterId);

@PostConstruct

public void init(){

try {

workerId = NetUtil.ipv4ToLong(NetUtil.getLocalhostStr());

log.info("当前机器的workerId:{}",workerId);

}catch (Exception e){

e.printStackTrace();

log.info("当前机器的workerId获取失败",e);

workerId=NetUtil.getLocalhostStr().hashCode();

}

}

public synchronized long snowflakeId(){

return snowflake.nextId();

}

public synchronized long snowflakeId(long workerId,long datacenterId){

Snowflake snowflake= IdUtil.createSnowflake(workerId,datacenterId);

return snowflake.nextId();

}

public static void main(String[] args) {

System.out.println(new IdGeneratorSnowflake().snowflakeId());

}

}

2.service层

public interface DeliverGoodsService {

String getIDBySnowFlake();

}

3.serviceimpl层

@Slf4j

@Service

@Transactional

public class DeliverGoodsServiceImpl implements DeliverGoodsService {

@Autowired

private IdGeneratorSnowflake idGeneratorSnowflake;

@Override

public String getIDBySnowFlake() {

ExecutorService executorService= Executors.newFixedThreadPool(5);

for (int i=1;i<=20;i++){

executorService.submit(()->{

System.out.println(idGeneratorSnowflake.snowflakeId());

});

}

executorService.shutdown();

return "hello snowflake";

}

}

项目设计的工具类

cn.hutool

hutool-all

5.5.2

java工具类库包含时间戳生成,图片工具类,加密工具类,ip工具类等一系列工具类,非常强大

github开源地址 https://github.com/looly/hutool/官方中文文档 https://www.hutool.cn/docs/#/

哔哩哔哩springcloudalibaba上硅谷视频视频 https://www.bilibili.com/video/BV18E411x7eT?from=search&seid=13488436241056256401上硅谷github地址sql及脑图 https://github.com/acloudyh/springCloud

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值