分为前台处理跟后台处理:
前台:
当表当提交的时候,把提交按钮disable掉。
后台:
利用redis的分布式锁,将表单中可以作为唯一标志的字段,比如身份证号,作为锁(ps:如果找不到唯一标志的字段,可以对表单的所有字段做一个mad加密,作为锁)。
伪代码 :
boolean flag = RedisUtil.lock(唯一标志,2分钟);
if(flag) {
try{
save(....)
} finally {
//释放锁
RedisUtil.unLock(唯一标志)
}
}else {
throw new RuntimeException("表单不可重复提交");
}
需要注意的是,2分钟是这个锁的存活时间,熟悉分布式锁的都知道,这个存活时间是一定要存在的,具体多长,视业务而定