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

模拟防止重复提交

 gitee地址(需要自取)AopProxy重复提交: 防止重复提交 (gitee.com)

@RestController
public class SubmissionController {@Autowiredprivate SubmissionService submissionService;private static Jedis jedis = new Jedis("localhost",6379);private String lock = "lock";private String lockValue = "locked";private int gqsj = 5;private String ok = "OK";@PostMapping("/submit")public void handleSubmitForm(@RequestParam String name, @RequestParam int age) {SubmissionService submissionServiceProxy = (SubmissionService) Proxy.newProxyInstance(submissionService.getClass().getClassLoader(), new Class[]{SubmissionService.class}, (proxy, method, args) -> {SetParams params = new SetParams();params.nx().ex(gqsj);String res = jedis.set(lock, lockValue,params);if (ok.equals(res)){Object invoke = method.invoke(submissionService,name,age);System.out.println("提交成功");return invoke;}else {System.out.println("不允许重复提交");return null;}});submissionServiceProxy.insert(name, age);//      存疑?第一天晚上return null后汇报一个空指针错误,奇怪的是第二天不报错了
//      希望懂得大佬给小弟支个招//        try{
//            submissionServiceProxy.insert(name, age);
//        }catch (NullPointerException e){
//            System.out.println("禁止重复提交");
//        }}
}

思路就是使用代理来执行方法,使用aop的思想对其进行切片,在执行方法前加一个分布式锁,这里分布式锁采用的是redis.nx,并加上一个过期时间防止死锁。整体只做了一个简单模拟,写的比较简单,有错误或不足的地方,还请指正,共同进步。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 用智能方法设计量子点半导体光放大器
  • 数据结构第22节 堆排序优化
  • Hive的分区表分桶表
  • RKNN3588——利用推理YOLOv8推理图片
  • 浅析Nginx技术:开源高性能Web服务器与反向代理
  • [RK3566-Android11] 使用iPhone14/15出现的蓝牙断开重连无声音问题
  • duplicate key value violates unique constraint
  • 谷粒商城学习笔记-19-快速开发-逆向生成所有微服务基本CRUD代码
  • 科研绘图系列:R语言两组数据散点分布图(scatter plot)
  • 【Java16】多态
  • 【Cesium开发实战】火灾疏散功能的实现,可设置火源点、疏散路径、疏散人数
  • 修正版头像上传组件
  • 网络规划与设计————期末复习
  • 华为手机联系人不见了怎么恢复?3个解决方案
  • Go协程与通道的综合应用问题
  • 【附node操作实例】redis简明入门系列—字符串类型
  • Android单元测试 - 几个重要问题
  • Apache的基本使用
  • CSS相对定位
  • dva中组件的懒加载
  • Git学习与使用心得(1)—— 初始化
  • leetcode388. Longest Absolute File Path
  • Python爬虫--- 1.3 BS4库的解析器
  • springMvc学习笔记(2)
  • webpack入门学习手记(二)
  • windows下如何用phpstorm同步测试服务器
  • 大主子表关联的性能优化方法
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 构建工具 - 收藏集 - 掘金
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 排序算法之--选择排序
  • 前端
  • 前端学习笔记之观察者模式
  • 如何在 Tornado 中实现 Middleware
  • 世界上最简单的无等待算法(getAndIncrement)
  • 数据科学 第 3 章 11 字符串处理
  • 突破自己的技术思维
  • 运行时添加log4j2的appender
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • # 安徽锐锋科技IDMS系统简介
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #QT(TCP网络编程-服务端)
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (09)Hive——CTE 公共表达式
  • (10)ATF MMU转换表
  • (void) (_x == _y)的作用
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (一)插入排序
  • (转)用.Net的File控件上传文件的解决方案
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网