当前位置: 首页 > ai >正文

resubmit v1.2.0 新特性支持类级别防止重复提交

前言

resubmit 是一款为 java 设计的渐进式防止重复提交框架。

创作目的

有时候手动加防止重复提交很麻烦,每次手动编写不利于复用。

所以希望从从简到繁实现一个工具,便于平时使用。

特性

  • 渐进式实现,可独立 spring 使用

  • 基于注解+字节码,配置灵活

  • 支持编程式的调用

  • 支持注解式,完美整合 spring

  • 支持整合 spring-boot

  • 支持方法级别、类级别注解

快速开始

maven 引入

<dependency><groupId>com.github.houbb</groupId><artifactId>resubmit-springboot-starter</artifactId><version>1.2.0</version>
</dependency>

测试代码

service 类

@Service
@Resubmit(value = 5000, enable = true)
public class ClassLevelService {@Resubmit(enable = false)public void queryInfoNoLimit(final String id) {System.out.println("queryInfoNoLimit: " + id);}public void queryInfoLimit(final String id) {System.out.println("queryInfoLimit: " + id);}}

测试类

@ContextConfiguration(classes = SpringConfig.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class ResubmitSpringClassLevelTest {@Autowiredprivate ClassLevelService classLevelService;@Test(expected = ResubmitException.class)public void queryInfoLimitTest() {classLevelService.queryInfoLimit("1");classLevelService.queryInfoLimit("1");}@Testpublic void queryInfoNoLimitTest() {classLevelService.queryInfoNoLimit("1");classLevelService.queryInfoNoLimit("1");}}

如此就可以完成一个类级别支持的防重复提交。

注解

注解 @Resubmit 对应的属性如下,可以在方法或者类上。方法的级别优先于类。

属性说明默认值
value()多久内禁止重复提交,单位为毫秒。8000
enable()是否启用true

拓展阅读

01-面试官:你们项目中是怎么做防重复提交的?

02-java 表单避免重复提交 resubmit 开源项目介绍

03-idempotent 幂等性介绍+如何防止重复提交?

04-简单聊一聊防重复提交

05-还在深夜加班改Bug?雷军都点赞的防重提方案来了!

06-v1.2.0 新特性类级别防止重复提交

开源矩阵

下面是一些从防止重复提交相关,整个系列的开源矩阵规划。

名称介绍状态
resubmit防止重复提交核心库已开源
rate-limit限流核心库已开源
cache手写渐进式 redis已开源
lock开箱即用的分布式锁已开源
common-cache通用缓存标准定义研发中
redis-config兼容各种常见的 redis 配置模式研发中
quota-server限额限次核心服务待开始
quota-admin限额限次控台待开始
flow-control-server流控核心服务待开始
flow-control-admin流控控台待开始
http://www.xdnf.cn/news/10254.html

相关文章:

  • 深度学习总结(40)
  • 数据集笔记:SeekWorld
  • 【Java笔记】Spring IoC DI
  • YOLOv8 移动端升级:借助 GhostNetv2 主干网络,实现高效特征提取
  • 【CC协议】知识共享许可协议(Creative Commons Licenses)体系解析
  • 注销微软账户
  • android 媒体框架之MediaCodec
  • MySQL中COUNT(*)、COUNT(1)和COUNT(字段名)的深度剖析与实战应用
  • 谷歌:贝叶斯框架优化LLM推理反思
  • CMake指令:list()
  • MySQL(48) 什么是ZEROFILL属性?
  • 宇树机器狗go2添加3d雷达(下)添加velodyne系列雷达
  • 《高等数学》(同济大学·第7版) 第一节《映射与函数》超详细解析
  • 数据库只更新特定字段的两种方式(先读后写 vs. 动态组织 SQL)-golang SQLx 实现代码(动态组织 SQL)
  • 索引的选择与Change Buffer
  • Linux进程信号
  • 车载诊断架构SOVD --- 车辆发现与建连
  • 项目:贪吃蛇实现
  • AI与智能驾驶的关系和原理:技术融合与未来展望-优雅草卓伊凡一、AI大模型基础原理与智能驾驶
  • 【Linux系列】Linux/Unix 系统中的 CPU 使用率
  • C++23 已移除特性解析
  • 电子电路:怎么理解时钟脉冲上升沿这句话?
  • ASP.NET Core SignalR的基本使用
  • 《深入解析SPI协议及其FPGA高效实现》-- 第一篇:SPI协议基础与工作机制
  • Python编程基础(一) | 变量和简单数据类型
  • git下载和安装(完整版)
  • 什么是特性阻抗
  • ArcPy错误处理与调试技巧(2)
  • Mybatis ORM SpringORM
  • 计算机视觉---GT(ground truth)