java生成訂單流水號
阿新 • • 發佈:2018-11-12
做一個訂單模組,需要生成唯一訂單號,這裡需要考慮到以後的分庫分表,所以不能拿Mysql主鍵作為流水號,還要考慮併發問題,簡單實現:
package com.jzg.svsp.order.utils; import javax.validation.constraints.NotNull; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; /** * @author: YuGenHai * @name: AbstractOrderSequenceRandom * @creation: 2018/9/21 16:57 * @notes: svsp + yyyyMMdd + uuid /random * @notes: 生成訂單號工具類*/ public abstract class AbstractOrderSequenceRandom { /** * 訂單字首 */ private static final String ORDERPREFIX = "SVSP"; /** * 時間戳 */ private static final String FORMAT = "yyyyMMddHHmmss"; /** * 數字隨機 */ public static final String numberChar = "0123456789";/** * 隨機數字 */ public static final int numberFor = 5; /** * @return * @author yugenhai */ @NotNull public synchronized static String createOrderSnRandom() { return AbstractOrderSequenceRandomInner.createOrderSnRandomInner(); } /** * 建立訂單號<svsp + yyyy-mm-dd + Random> * *@author yugenhai */ private final static class AbstractOrderSequenceRandomInner { private synchronized static String createOrderSnRandomInner() { SimpleDateFormat sdf = new SimpleDateFormat(FORMAT); StringBuffer sb = new StringBuffer(); Random random = new Random(); for (int i = 0; i < numberFor; i++) { sb.append(numberChar.charAt(random.nextInt(numberChar.length()))); } return ORDERPREFIX + sdf.format(new Date()) + sb.toString(); } } }