【发布时间】:2018-12-21 14:13:04
【问题描述】:
根据我在网上查到的资料,GUID重复的概率很小,那么是不是我的代码有问题?
public class AccountTaskExecutorTask extends TimerTask {
private static final Logger logger = Logger.getLogger(AccountTaskExecutorTask.class);
private TellerDbCore.AccountTask.Builder aTask = null;
public AccountTaskExecutorTask(TellerDbCore.AccountTask.Builder aTask) {
this.aTask = aTask;
}
public static void schedule(TellerDbCore.AccountTask.Builder aTask) {
Timer timer = new Timer();
timer.schedule(new AccountTaskExecutorTask(aTask), 100L);
}
@Override
public void run() {
try {
DataBaseStore dataBaseStore = null;
try {
dataBaseStore = DbHelper.getTransactableDbStore();
invest(aTask, dataBaseStore);
dataBaseStore.commitAndClose();
dataBaseStore = null;
} catch (Exception e) {
logger.error("", e);
if (dataBaseStore != null) {
dataBaseStore.rollbackAndClose();
dataBaseStore = null;
}
}
} catch (Exception e) {
logger.error("", e);
}
}
private static void invest(TellerDbCore.AccountTask.Builder theTask, DataBaseStore dataBaseStore) throws Exception {
switch (theTask.getTaskStatus()) {
case TS_READY:
List<TellerDbCore.AccountSubTask.Builder> subList = AccountTaskHelper.querySubAtByMtId(theTask.getTaskId(), dataBaseStore);
if (subList.size() == 0) {
NewMethods.newAccountSubTask(theTask.getTaskId(), GUID.generateGUID().toLowerCase(),
theTask.getAccountId(), theTask.getProductType(), theTask.getTaskType(), theTask.getAmount(), dataBaseStore);
}
UpdateMethods.updateAccountTask(theTask.getTaskId(), null, BtsDbBase.TaskStatus.TS_PROCESSING, dataBaseStore);
break;
case TS_PROCESSING:
break;
case TS_SUCCESSED:
case TS_FAILED:
break;
default:
logger.info( theTask.getTaskStatus());
break;
}
}
}
在此代码中,GUID 由GUID.generateGUID().toLowerCase() 生成,包的名称为oscore-2.2.4.jar。 NewMethods.newAccountSubTask是向数据库中添加数据。
这是GUID的代码
package com.opensymphony.util;
import com.opensymphony.module.random.Yarrow;
import java.math.BigInteger;
public final class GUID
{
private static Yarrow rnd = new Yarrow();
public static String generateFormattedGUID()
{
String guid = generateGUID();
return guid.substring(0, 8) + '-' + guid.substring(8, 12) + '-' + guid.substring(12, 16) + '-' + guid.substring(16, 20) + '-' + guid.substring(20);
}
public static String generateGUID()
{
return new BigInteger(165, rnd).toString(36).toUpperCase();
}
}
【问题讨论】:
-
GUID类/接口是什么...? -
GUID是类。 -
那你的错误是什么?
-
为什么不使用“java.util.UUID”?
-
你能用
UUID.randomUUID();吗?