欢迎来到站长教程网!

Java编程

当前位置:主页 > 软件教程 > Java编程 >

SpringBoot实现接口幂等性的4种方案

时间:2021-05-05|栏目:Java编程|点击:

一、什么是幂等性

幂等是一个数学与计较机学观念,在数学中某一元运算为幂等时,其浸染在任一元素两次后会和其浸染一次的功效沟通。
在计较机中编程中,一个幂等操纵的特点是其任意多次执行所发生的影响均与一次执行的影响沟通。幂等函数或幂等要领是指可以利用沟通参数反复执行,并能得到沟通功效的函数。这些函数不会影响系统状态,也不消担忧反复执行会对系统造成改变。

二、什么是接口幂等性

在HTTP/1.1中,对幂等性举办了界说。它描写了一次和多次请求某一个资源对付资源自己应该具有同样的功效(网络超时等问题除外),即第一次请求的时候对资源发生了副浸染,可是今后的多次请求都不会再对资源发生副浸染。
这里的副浸染是不会对功效发生粉碎可能发生不行预料的功效。也就是说,其任意多次执行对资源自己所发生的影响均与一次执行的影响沟通。

三、为什么需要实现幂等性

在接口挪用时一般环境下都能正常返复书息不会反复提交,不外在碰见以下环境时可以就会呈现问题,如:

利用幂等性最大的优势在于使接口担保任何幂等性操纵,免除因重试等造成系统发生的未知的问题。

四、引入幂等性后对系统的影响

幂等性是为了简化客户端逻辑处理惩罚,能安排反复提交等操纵,但却增加了处事端的逻辑巨大性和本钱,其主要是:

所以在利用时候需要思量是否引入幂等性的须要性,按照实际业务场景详细阐明,除了业务上的非凡要求外,一般环境下不需要引入的接口幂等性。

五、Restful API 接口的幂等性

此刻风行的 Restful 推荐的几种 HTTP 接口要领中,别离存在幂等行与不能担保幂等的要领,如下:

要领范例 是否幂等 描写
Get Get 要领用于获取资源。其一般不会也不应当对系统资源举办改变,所以是幂等的。
Post × Post 要领一般用于建设新的资源。其每次执行城市新增数据,所以不是幂等的。
Put - Put 要领一般用于修改资源。该操纵则分环境来判定是不是满意幂等,更新操纵中直接按照某个值举办更新,也能保持幂等。不外执行累加操纵的更新长短幂等。
Delete - Delete 要领一般用于删除资源。该操纵则分环境来判定是不是满意幂等,当按照独一值举办删除时,删除同一个数据多次执行结果一样。不外需要留意,带查询条件的删除则就不必然满意幂等了。譬喻在按照条件删除一批数据后,这时候新增加了一条数据也满意条件,然后又执行了一次删除,那么将会导致新增加的这条满意条件数据也被删除。

六、如何实现幂等性

方案一:数据库独一主键

方案描写

数据库独一主键的实现主要是操作数据库中主键独一约束的特性,一般来说独一主键较量合用于“插入”时的幂等性,其能担保一张表中只能存在一条带该独一主键的记录。
利用数据库独一主键完成幂等性时需要留意的是,该主键一般来说并不是利用数据库中自增主键,而是利用漫衍式 ID 充当主键(可以参考 Java 中漫衍式 ID 的设计方案 这篇文章),这样才气能担保在漫衍式情况下 ID 的全局独一性。
合用操纵:

利用限制:

需要生玉成局独一主键 ID;

主要流程:

SpringBoot实现接口幂等性的4种方案

主要流程:

① 客户端执行建设请求,挪用处事端接口。
② 处事端执行业务逻辑,生成一个漫衍式 ID,将该 ID 充当待插入数据的主键,然后执数据插入操纵,运行对应的 SQL 语句。
③ 处事端将该条数据插入数据库中,假如插入乐成则暗示没有反复挪用接口。假如抛出主键反复异常,则暗示数据库中已经存在该笔记录,返回错误信息到客户端。

方案二:数据库乐观锁

方案描写:

数据库乐观锁方案一般只能合用于执行“更新操纵”的进程,我们可以提前在对应的数据表中多添加一个字段,充当当前数据的版本标识。这样每次对该数据库该表的这条数据执行更新时,城市将该版本标识作为一个条件,值为上次待更新数据中的版本标识的值。

合用操纵:

利用限制:

需要数据库对应业务表中添加特别字段;

描写示例:

SpringBoot实现接口幂等性的4种方案

譬喻,存在如下的数据表中:

上一篇:详解Mybatis中万能的Map和恍惚查询写法

栏    目:Java编程

下一篇:Spring Security 自界说短信登录认证的实现

本文标题:SpringBoot实现接口幂等性的4种方案

本文地址:www.jiaocheng88.com.cn/javabiancheng/61998.html

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:584415406 | 邮箱:584415406#qq.com(#换成@)

Copyright © 2015-2020 小白站长教程网 版权所有 苏ICP备20040415号-3