1.接口的幂等性
接口幂等性就是接口的可重复调用,主要是对数据库的增删改.
实现幂等性的方式:
(1) 全局唯一id,需要根据实际业务生成,操作执行成功后生成这个id,每次执行操作前先判断这个id存不存在,存在就是已执行,不存在则添加这个id.
(2)去重表:就是利用数据库的唯一约束.如果重复新增某个唯一标识,就会报唯一约束异常,再利用事务回滚.
(3)利用版本号控制.多拥有更新操作.每次更新的时候需要在where条件中添加version判断,并更新version.如果版本已更新就无法再次根据原版本号更新了.
(4)在并发不高的系统,可以在新增或更新操作执行前先对关键数据进行查询,并根据实际业务设置判断,通过后再执行操作
2.注解transactional的失效场景以及解决办法
失效场景:(1)注解所在方法为public状态以外的
(2)异常为check异常,也就是非运行时异常,比如timeout,io读写.
(3)异常被catch并且没有抛出
解决:@Transactional(rollbackFor=Exception.class) 设置异常回滚类型.