1、source+唯一序列号构成唯一字段入库
2、借助redis的自增指令实现唯一(incr指令 )
/**
* 生成唯一流水号借助UUID
* 还可借助redis或者数据库
* @author xpzhang
*
*/
public class IdempotentTest {
public static void main(String[] args) {
ArrayList<String> arrayList = new ArrayList<>();
for(int i=0;i<10000;i++) {
String uniqueIdentifier = getUniqueIdentifier();
System.out.println(uniqueIdentifier);
arrayList.add(uniqueIdentifier);
}
int size = arrayList.stream().distinct().collect(Collectors.toList()).size();
System.out.println(size+"==?"+arrayList.size());
}
/**
* 获取全局流水号
* @return prefix +yyMMDD+0123
*/
public static String getUniqueIdentifier() {
UUID uuid = UUID.randomUUID();
// 4位数字
String uuidString=uuid.toString().replace("-", "").toUpperCase();
// 当前日期 yyyyMMdd
String currentDate = formatDate(new Date());
String prefix="AOP";
return prefix+currentDate+uuidString;
}
/**
* 格式化日期
* @param date
* @return
*/
public static String formatDate(Date date){
String formatDate=null;
try {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
formatDate = simpleDateFormat.format(date);
} catch (Exception e) {
//logger.error("时间格式化异常",e);
}
return formatDate;
}
/**
* String转为Date日期格式
* @param s
* @return
*/
public static Date stringToDate(String s){
SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyy-MM-dd");
Date date=null;
try {
date = dateFormat.parse(s);
} catch (ParseException e) {
//logger.error("String转为date异常",e);
}
return date;
}
}