冷静下来想一想,应该是多条请求在同一时刻内发过来的,它们同时判断出数据库当中没有数据,然后同时插入了进去,噢,原来是这个样子,那么这个问题该如何解决呢?...想象一下,现在有个用户对一个按钮狂按,那么我们就对这个操作加锁
加锁的思路是这样的:当一条请求过来的时候,我们就做一个标识,标识当前用户的某一条请求正在被处理,当这个用户的其他请求进来的时候,看到有标识就对这些请求弃之不顾...remove掉,因为afterRun方法是任何请求(包括不同用户的请求)结束都会调用,
//所以这也是runningTokenValue这样设计的原因,保证是同一个用户的其中一个请求...,然后可以根据这个token生成一个叫runningToken的东西标识当前用户的请求,具体是哪个线程在处理呢,所以就要以runningToken为key,runningTokenValue(runningToken...与线程id拼接成的字符串)为值存进缓存当中,在aop的@After方法中remove掉runningToken的时候,一定要判断线程是不是当前用户的正在被处理的请求,如果是的话,才可以remove掉它,