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

前言

这是一个希望让每一位程序员按时下班的防止重复提交开源利器。

复制代码
"那天凌晨2点,我因为重复提交漏洞被搞得半夜加班解决问题。  

现在,我只用一行代码 就解决了这个问题------  

这就是 resubmit ,一个普通程序员送给所有同行的防崩盘保险。"  

------ 一位不愿意透露姓名的 996 程序员

防重复提交

实现方式对比

实现方式对比

java 复制代码
// 方案1:手动if校验(新手最爱)
if(!cache.contains(requestId)) { // 漏判并发问题 → 资损事故
    doBusiness();
}

// 方案2:AOP切面(老鸟的选择)
@Around("execution(* com..*Controller.*(..))") // 几十行代码+调试验证 → 加班秃头
public Object checkRepeat(ProceedingJoinPoint joinPoint) { 
    // 复杂参数解析...
}

// 方案3:resubmit(今天起换种活法)
@Resubmit(5000) // ◾ 1行注解 → 下班约会
public void business(String id) {
    // 安心写核心逻辑
}

参数理性美:精准到毫秒的防御方程

可以结合自己的实际业务,调整阈值。

防御场景 resubmit方案 传统方案
支付防连点 @Resubmit(3000) 前端按钮禁用+后端校验
表单防重复提交 @Resubmit(10000) Token机制+Session管理
秒杀防超卖 @Resubmit(0) Redis分布式锁

resubmit 适合 99% 中小项目,无缝整合 spring,纵享丝滑。

当然也支持分布式集群,支持灵活拓展。

🚀 三步接入,永久告别重复提交噩梦

STEP 1:加个注解(比写注释还简单)

java 复制代码
public class OrderService {
    @Resubmit(5000) // 5秒内相同订单ID拦截
    public void pay(String orderId) {
        // 你的核心业务逻辑
    }
}

STEP 2:SpringBoot专属(自动防御模式)

xml 复制代码
<dependency>
    <groupId>com.github.houbb</groupId>
    <artifactId>resubmit-springboot-starter</artifactId>
    <version>1.1.1</version>
</dependency>

STEP 3:分布式扩展(Redis集群护航)

java 复制代码
@EnableResubmit(cache = "redisCache") 

@Bean
public ICommonCacheService redisCache() {
    return new RedisCacheService("127.0.0.1:6379"); 
}

尾声

resubmit 只做一件事:用最优雅的方式,杀死重复提交

这世界从不缺复杂的系统,缺的是让程序员 早点下班 的诚意

👉 马上体验 resubmit

"在重复提交的战场上,最好的防御是让用户感知不到防御的存在"

"程序员写代码的时间应该省下来,多陪陪家人"

✋ P.S. 来自作者的坦白

"这个项目没有融资、没有PR团队。如果你也被重复提交折磨过,点个Star就是对我最大的认可"

houbb @ GitHub

拓展阅读

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

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

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

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

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

开源矩阵

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

名称 介绍 状态
resubmit 防止重复提交核心库 已开源
rate-limit 限流核心库 已开源
cache 手写渐进式 redis 已开源
lock 开箱即用的分布式锁 已开源
common-cache 通用缓存标准定义 研发中
redis-config 兼容各种常见的 redis 配置模式 研发中
quota-server 限额限次核心服务 待开始
quota-admin 限额限次控台 待开始
flow-control-server 流控核心服务 待开始
flow-control-admin 流控控台 待开始
相关推荐
学习编程的Kitty35 分钟前
JavaEE初阶——多线程(5)单例模式和阻塞队列
java·开发语言·单例模式
m0_3722570235 分钟前
项目下有多个模块,每个模块有pom文件,是怎么继承的
java·tomcat
oak隔壁找我1 小时前
Spring AI 入门教程,使用Ollama本地模型集成,实现对话记忆功能。
java·人工智能·后端
懒羊羊不懒@1 小时前
JavaSe—Stream流☆
java·开发语言·数据结构
郝开1 小时前
最终 2.x 系列版本)2 - 框架搭建:pom配置;多环境配置文件配置;多环境数据源配置;测试 / 生产多环境数据源配置
java·spring boot·后端
Homeey1 小时前
深入理解ThreadLocal:从原理到架构实践的全面解析
java·后端
ANGLAL1 小时前
27.短链系统
java
Lisonseekpan2 小时前
Git 命令大全:从基础到高级操作
java·git·后端·github·团队开发
CodeCraft Studio2 小时前
国产化Excel处理控件Spire.XLS教程:使用Java将CSV转换为PDF(含格式设置)
java·pdf·excel·spire.xls·文档格式转换·csv转pdf
乐悠小码2 小时前
Java设计模式精讲---04原型模式
java·设计模式·原型模式