Commit 81c369f7 authored by zhiguo.liu's avatar zhiguo.liu

# 修改 IDGenerator 发号器最终号码的格式,去掉补位用的「0」

parent 9e594dc0
......@@ -39,13 +39,6 @@ public class IDGenerator {
private static final String REDIS_WORK_ID_KEY = "GLOBAL:WORK:ID:";
private static final String ID_FORMAT = "yyyyMMddHHmmss";
private static Lock lock = new ReentrantLock();
/**
* data center,默认为 1
*/
private static int DATA_CENTER_ID = 1;
/**
* 最高支持同时1W台机器
*/
......@@ -54,7 +47,11 @@ public class IDGenerator {
* 最高每秒发号 100w
*/
private static final int MAX_COUNT = 999999;
private static Lock lock = new ReentrantLock();
/**
* data center,默认为 1
*/
private static int DATA_CENTER_ID = 1;
private static AtomicInteger COUNTER = new AtomicInteger(0);
private static long MAX_TIME_SECOND;
......@@ -70,12 +67,6 @@ public class IDGenerator {
* 最长回退时间,120 秒
*/
private static int MAX_BACK_SECOND = 120;
static {
Date now = new Date();
MAX_TIME_SECOND = now.getTime() / 1000;
}
private static LoadingCache cache = CacheBuilder.newBuilder()
.expireAfterWrite(MAX_BACK_SECOND, TimeUnit.SECONDS)
.build(new CacheLoader<Long, AtomicInteger>() {
......@@ -85,23 +76,14 @@ public class IDGenerator {
}
});
static {
Date now = new Date();
MAX_TIME_SECOND = now.getTime() / 1000;
}
@Autowired
private StringRedisTemplate redis;
@Value("${data.center.id}")
public void setDataCenterId(Integer dataCenterId) {
DATA_CENTER_ID = dataCenterId;
}
@PostConstruct
public void init() {
int workerId = (int) (redis.opsForValue().increment(REDIS_WORK_ID_KEY + DATA_CENTER_ID, 1) % MAX_WORK_ID);
WORKER_ID_STR = String.format("%04d", workerId);
DATA_CENTER_STR = String.format("%03d", DATA_CENTER_ID);
}
/**
* 1. 需要获取 dataCenterId 和 workeId
*/
......@@ -146,7 +128,19 @@ public class IDGenerator {
}
String currentTimeStr = new SimpleDateFormat(ID_FORMAT, Locale.SIMPLIFIED_CHINESE).format(now);
return prefix + currentTimeStr + DATA_CENTER_STR + WORKER_ID_STR + String.format("%06d", counter);
return prefix + currentTimeStr + DATA_CENTER_STR + WORKER_ID_STR + counter;
}
@Value("${data.center.id}")
public void setDataCenterId(Integer dataCenterId) {
DATA_CENTER_ID = dataCenterId;
}
@PostConstruct
public void init() {
int workerId = (int) (redis.opsForValue().increment(REDIS_WORK_ID_KEY + DATA_CENTER_ID, 1) % MAX_WORK_ID);
WORKER_ID_STR = String.valueOf(workerId);
DATA_CENTER_STR = String.valueOf(DATA_CENTER_ID);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment