在一个事务里正对某段sql执行在增加一个事务,保证该sql的数据唯一性
给订单id设置16位自增的值
订单号生成规则:示例16位
前8位时间信息,年月日
中间6位为自增序列
MySQL没有sequence。可以设计一个sequence自增序列表模拟Oracle的sequence。
最后2位为分库分表位

@Transactional(propagation = Propagation.REQUIRES_NEW)的使用。
可以打在私有方法上,但是没有意义。
transactional标签用于将对应包装的bean设置成一个新的代理bean对象供外部使用,就是说外部调用这个proxy bean的公共方法时先会调用开启事务等的切面工作,若设置成私有方法只能类内用this指针调用,这样被调用的bean是其本身,不是proxy对象,因此没有transactional切面的意义。
不应该定义在private方法的切面上,应该将sequence生成定义成单独的service,然后用public方法去做切面,现在的代码实现方式等于是没有用到service生成的切面。
事务嵌套的相关知识,的确同类内方法调用,内层方法是无法实现事务的,因为内层方法是bean本身去调的不是代理对象,所以aop切不进来事务,只能在另外一个类中定义,核心还是要通过动态代理实现事务的切面
问题1:sequence没有设置最大值,无限加下去的话可能会超过6位,对应表里应该有个最大值字段,还应该有个初始值,当当前值大于最大值时取初始值
订单号生成规则
我们自己定位16为
前8位为年月日
中间6位为自增序列
最后2位为分库分表位