java数据库唯一id生成工具类

本文实例为大家分享了java数据库唯一id生成工具类的具体代码,供大家参考,具体内容如下

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.Random;
import java.util.UUID;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;

public class UniqueIdUtil
{
 private static long adjust = 1L;
 private static long nextId = 0L;
 private static long lastId = -1L;
 private static long randomLeng = 6L;
 private static JdbcTemplate jdbcTemplate;
 private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");

 private static void init()
 {
  try
  {
   jdbcTemplate = (JdbcTemplate)AppUtil.getBean("jdbcTemplateSN");
   String str2 = AppConfigUtil.get("genId.adjust");
   if (str2 != null) {
    adjust = Integer.parseInt(str2);
   }
  }
  catch (Exception localException)
  {
   adjust = 1L;
   String str3 = AppConfigUtil.get("genId.adjust");
   if (str3 != null) {
    adjust = Integer.parseInt(str3);
   }
  }
 }

 private static void getNextIdBlock()
 {
  if (jdbcTemplate == null) {
   init();
  }
  Long localLong = Long.valueOf(-1L);
  Integer localInteger = Integer.valueOf(-1);
  String str1 = "SELECT bound,incremental FROM SYS_DB_ID T WHERE T.ID=?";
  String str2 = "UPDATE SYS_DB_ID SET BOUND=? WHERE ID=?";
  try
  {
   Map localMap = jdbcTemplate.queryForMap(str1, new Object[] { Long.valueOf(adjust) });
   localLong = Long.valueOf(Long.parseLong(localMap.get("bound").toString()));
   localInteger = Integer.valueOf(Integer.parseInt(localMap.get("incremental").toString()));
   nextId = localLong.longValue();
   lastId = localLong.longValue() + localInteger.intValue();
   jdbcTemplate.update(str2, new Object[] { Long.valueOf(lastId), Long.valueOf(adjust) });
  }
  catch (EmptyResultDataAccessException localEmptyResultDataAccessException)
  {
   insertNewComputer();
  }
 }

 private static void insertNewComputer()
 {
  try
  {
   lastId = 10000L;
   String str = "INSERT INTO SYS_DB_ID (id,incremental,bound) VALUES(" + adjust + ",10000," + lastId + ")";
   jdbcTemplate.update(str);
  }
  catch (Exception localException)
  {
   localException.printStackTrace();
  }
 }

 public static synchronized long genId()
 {
  if (lastId <= nextId) {
   getNextIdBlock();
  }
  long l = nextId++;
  return l + adjust * 10000000000000L;
 }

 public static final String getGuid()
 {
  UUID localUUID = UUID.randomUUID();
  return localUUID.toString();
 }

 public static final String getRandom()
 {
  Random localRandom = new Random();
  String str1 = "";
  for (int i = 0; i < randomLeng; i++)
  {
   String str2 = String.valueOf(localRandom.nextInt(10));
   str1 = str1 + str2;
  }
  return str1;
 }

 public static String genOrderNo()
 {
  long l = genId();
  String str = dateFormat.format(new Date());
  return str + l;
 }

 public static void main(String[] paramArrayOfString)
  throws Exception
 {}
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java实现数据库主键生成示例

    复制代码 代码如下: package test;import java.util.concurrent.atomic.AtomicInteger; public class IDGenerate {private static final AtomicInteger integer = new AtomicInteger(0);public static long getId() {  long time = System.currentTimeMillis();  StringBuilder

  • java数据库唯一id生成工具类

    本文实例为大家分享了java数据库唯一id生成工具类的具体代码,供大家参考,具体内容如下 import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import java.util.Random; import java.util.UUID; import org.springframework.dao.EmptyResultDataAccessExce

  • JAVA 16位ID生成工具类含16位不重复的随机数数字+大小写

    本文介绍了Java随机数,分享给大家,也顺便做个笔记 package com.fty.util; import java.security.SecureRandom; import java.util.Random; import java.util.concurrent.ThreadLocalRandom; public class UtilId { /** * 生成16位不重复的随机数,含数字+大小写 * @return */ public static String getGUID() {

  • Java几种分布式全局唯一ID生成方案

    目录 缘起 常见方案 UUID 数据库自增键 TDDL Sequence Leaf-segment 类雪花算法 时间回拨问题 Leaf-snowflake Seata UUID 总结 缘起 在分布式微服务系统架构下,有非常多的情况我们需要生成一个全局唯一的 ID 来做标识,比如: 需要分库分表的情况下,分库或分表会导致表本事的自增键不具备唯一性. 较长的业务链路涉及到多个微服务之间的调用,需要一个唯一 ID 来标识比如订单 ID.消息 ID.优惠券 ID.分布式事务全局事务 ID. 对于全局唯一

  • Go开源项目分布式唯一ID生成系统

    目录 前言 项目背景 项目使用 HTTP 方式 gRPC 方式 本地开发 项目架构 前言 今天跟大家介绍一个开源项目:id-maker,主要功能是用来在分布式环境下生成唯一 ID.上周停更了一周,也是用来开发和测试这个项目的相关代码. 美团有一个开源项目叫 Leaf,使用 Java 开发.本项目就是在此思路的基础上,使用 Go 开发实现的. 项目整体代码量并不多,不管是想要在实际生产环境中使用,还是想找个项目练手,我觉得都是一个不错的选择. 项目背景 在大部分系统中,全局唯一 ID 都是一个强需

  • java实现的导出Excel工具类实例

    本文实例讲述了java实现的导出Excel工具类.分享给大家供大家参考,具体如下: ExcelExportUtil: package com.excel; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.

  • java实现随机抽取奖品工具类

    本文实例为大家分享了java实现随机抽取奖品工具类的具体代码,供大家参考,具体内容如下 随机抽取奖品 整体思路: 1.奖品集合 + 概率比例集合 2.将奖品按集合中的顺序概率计算成所占比例区间,放入比例集合.并产生一个随机数加入其中,进行排序. 3.排序后随机数落在那个区间就表示那个区间的奖品被抽中. 4.返回的随机数在集合中的索引,该索引就是奖品集合的中的索引. 5.比例区间的计算通过概率相加获得. //奖品的实体类 public class Gift { private String id;

  • Java常用类库Apache Commons工具类说明及使用实例详解

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于JavaBean进行各种操作,克隆对象,属性等等. Betwixt XML与Java对象之间相互转换. Codec 处理常用的编码方法的工具类包 例如DES.SHA1.MD5.Base64等. Collections java集合框架操作. Compress java提供文件打包 压缩类库. Con

  • Springboot Mybatis Plus自动生成工具类详解代码

    前言 代码生成器,也叫逆向工程,是根据数据库里的表结构,自动生成对应的实体类.映射文件和接口. 看到很多小伙伴在为数据库生成实体类发愁,现分享给大家,提高开发效率. 一.pom依赖 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.1</version> &

  • Java超级实用的Freemarker工具类

    目录 一.工具类 二.测试 一.工具类 public class FreemarkerUtil {     /**      * 根据模板,利用提供的数据,生成文件      * @param ftlNameWithPath 模板文件      * @param data 数据      * @param aimFileName 最终生成的文件      * @throws IOException      * @throws TemplateException      */     publ

  • Zookeeper全局唯一ID生成方案解析

    系统唯一ID生成分案有很多种,例如:数据库 auto_increment,UUID,Redis生成ID(Redis原子操作INCR和INCRBY),Twiitter的snowflake算法,ZooKeeper生成ID,MongoDb的ObjectId,下面我们就看一下ZooKeeper实现分布式系统唯一ID. public int idGen() throws Exception { String zkAddress = "127.0.0.1:2181"; String idNode

随机推荐