持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
业务:关于编号自动生成,
逻辑1:按创建时间倒叙排列,取最新的一条。
逻辑1问题:
访问量较大时,极短时间内生成多条记录。
逻辑1分析:
数据时间相差不大,取到的可能不是最新的记录,导致重复数据激增,待验证
逻辑2:后改用流水号方式,取最新流水号最大的值加一,生成新编号。
逻辑2问题:
重复概率明显减少,但是编码还是会出现重复现象,间隔时间3s左右。
逻辑2分析:
生成方法在3s左右接收到多条请求,由于controller是单例的,线程不安全,上一条还没持久化到数据库,下一条查到的最新流水号还是旧的,导致编码重复;
由并发引起的,目前采取在controller添加@SessionScope作用域,作用:用户访问创建Session是会创建controller对象,也就是说每个用户分配一个controller对象,目前效果,重复编码基本没有,待验证;试用于体量不大不小的项目,再多了只能想其他办法了。
@Controller
@RequestMapping(value = "test")
//在控制器上加上此注解即可
@SessionScope
public class TestController {
}