单实例环境,不是分布式
需要流水号
/** * 流水号生成器 * * 年+天号+毫秒+随机数 * 2019+134+480+11位随机数 * 4+3+3+11 = 21位 * * * @author sxd * @date 2019/5/14 9:55 */ public class SerialCreater { public static final String SERIAL_FROMAT = "%s%s%s%s"; private String serialNum; public SerialCreater() { this.serialNum = String.format( SERIAL_FROMAT, DateUtil.thisYear(), Calendar.getInstance().get(Calendar.DAY_OF_YEAR), DateUtil.thisMillsecond(), random()); } public static String getSerial(){ return new SerialCreater().serialNum; } private String random(){ Long a = new Random().nextLong(); Long b = DateUtil.current(false); Long c = (a-b)>>>16; return autoGenericCode(c); } private String autoGenericCode(Long old){ String result = old.toString(); int length = result.length(); if (length > 11){ result = result.substring(0,11); }else if (length < 11){ result = String.format("%011d", old); } return result; } }