日期+序列构建系统唯一序列号(一)

项目中用到的流水号格式要求如:20170928000001,即当前年月日 + 自增序列构成

一、创建序列

create sequence sys_seq
minvalue 1
maxvalue 999999
start whit 1
increment by 1
cache 50
cycle
NOORDER;

二、获取序列

<select id="selectSequence.sql" resultClass="string">
    select sys_seq.nextval from dual
</select>

三、拼接日期和序列

package sequence;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

@Service
public class SerialServiceImpl implements SerialService {
	
	@Resource
	private SequenceDao sequenceDao;
	
	//为了防止并发问题  这里利用ThreadLocal来保护DateFormat对象
	//当然也可以将DateFormat作为方法getSerial的局部变量,每次取都new一个
	private static final ThreadLocal<DateFormat> df = new ThreadLocal<DateFormat>() {
		@Override
		protected DateFormat initialValue() {
			return new SimpleDateFormat("yyyyMMdd");
		}
	};

	@Override
	public String getSerial() {
		String seq = sequenceDao.selectSequence();
		String date = df.get().format(new Date());
		//序列前需要填充0补足6位
		String serial = date + String.format("%06d", Integer.parseInt(seq));
		return serial;
	}

}

这个流水号设计得比较简单,序列自增到999999就循环又从1开始,和当前日期没有什么特别的关联,
改天设计一个可以按日、月或年复位的流水号。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值