在做压力测试时有一个操作 取数据库表中的某个数值,取到后+1 ,该方法已经做了锁表操作 但是取的数不知道为什么重复了代码如下 请问该如何处理
public synchronized String getMaxNo(String codeType, String numLimit,int step){
return CreateMaxNo(codeType,numLimit,step);
}
private String CreateMaxNo(String codeType, String numLimit,
int step) {
NumManage manage = new NumManage();
String strMaxNo = null;
manage = (NumManage) hibernateBasedDao.get(NumManage.class, codeType);
System.out.println("manage" + manage);
if (manage == null) {
NumManage nummanage = new NumManage();
nummanage.setCodeType(codeType);
strMaxNo = leftPad("1", "0", numLimit.length() - 1);
nummanage.setNum(strMaxNo);
hibernateBasedDao.save(nummanage);
} else {
int maxNo = Integer.valueOf(manage.getNum()).intValue() + step;
if (maxNo >= Integer.valueOf(numLimit).intValue()) {
maxNo = 1;
}
manage.setNum(leftPad(String.valueOf(maxNo), "0",
numLimit.length() - 1));
hibernateBasedDao.getHibernateTemplate().update(manage,
LockMode.UPGRADE);
NumManage newManage = (NumManage) hibernateBasedDao.get(
NumManage.class, codeType);
strMaxNo = newManage.getNum();
}
return strMaxNo;
}
public static String leftPad(String sourString, String cChar, int cLen) {
String tReturn = "";
try {
int tLen = sourString.length();
int i, iMax;
if (tLen >= cLen)
return sourString;
iMax = cLen - tLen;
for (i = 0; i < iMax; i++) {
tReturn = cChar + tReturn;
}
tReturn = tReturn + sourString.trim();
} catch (Exception e) {
}
return tReturn;
}
2010年8月30日 11:25