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

中小学 网站建设 通知中国矿井建设相关媒体网站

中小学 网站建设 通知,中国矿井建设相关媒体网站,免费网站自助建站系统,最美情侣高清视频播放文章目录 1. 环境准备2. 引入依赖3. 配置Redis4. 创建防重复提交注解5. 实现AOP切面6. 创建示例Controller7. 测试8. 进一步优化8.1 自定义异常处理8.2 提升Redis的健壮性 9. 总结 #x1f389;欢迎来到Java学习路线专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨… 文章目录 1. 环境准备2. 引入依赖3. 配置Redis4. 创建防重复提交注解5. 实现AOP切面6. 创建示例Controller7. 测试8. 进一步优化8.1 自定义异常处理8.2 提升Redis的健壮性 9. 总结 欢迎来到Java学习路线专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒✨博客主页IT·陈寒的博客该系列文章专栏Java学习路线其他专栏Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习文章作者技术和水平有限如果文中出现错误希望大家能指正 欢迎大家关注 ❤️ 在现代Web应用中防止重复提交是一个常见的需求。重复提交可能会导致数据一致性问题例如重复的订单生成、数据多次插入等。本文将介绍如何使用Spring Boot、AOP、注解和Redis来实现防重复提交防抖功能。 1. 环境准备 在开始之前我们需要准备以下开发环境 JDK 1.8MavenSpring BootRedis 首先创建一个新的Spring Boot项目可以使用Spring Initializrhttps://start.spring.io/快速生成项目结构。选择依赖项包括Spring Web、Spring Data Redis、Lombok等。 2. 引入依赖 在pom.xml中添加必要的依赖 dependencies!-- Spring Boot Starter Web --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- Spring Boot Starter Data Redis --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency!-- Lombok --dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependency!-- AOP --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId/dependency /dependencies3. 配置Redis 在application.properties文件中配置Redis连接信息 spring.redis.hostlocalhost spring.redis.port6379 spring.redis.passwordyourpassword4. 创建防重复提交注解 首先创建一个自定义注解NoRepeatSubmit用于标识需要防重复提交的方法 package com.example.demo.annotation;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface NoRepeatSubmit {long expire() default 5; // 防重复提交时间间隔秒 }5. 实现AOP切面 接下来创建一个AOP切面类用于拦截标注了NoRepeatSubmit注解的方法并检查是否重复提交 package com.example.demo.aspect;import com.example.demo.annotation.NoRepeatSubmit; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest; import java.util.concurrent.TimeUnit;Aspect Component Slf4j public class NoRepeatSubmitAspect {Autowiredprivate StringRedisTemplate redisTemplate;Autowiredprivate HttpServletRequest request;Around(annotation(noRepeatSubmit))public Object around(ProceedingJoinPoint pjp, NoRepeatSubmit noRepeatSubmit) throws Throwable {String key getKey();long expireTime noRepeatSubmit.expire();Boolean hasKey redisTemplate.hasKey(key);if (Boolean.TRUE.equals(hasKey)) {log.warn(重复提交请求, key: {}, key);throw new RuntimeException(请勿重复提交);}redisTemplate.opsForValue().set(key, 1, expireTime, TimeUnit.SECONDS);try {return pjp.proceed();} finally {redisTemplate.delete(key);}}private String getKey() {String sessionId request.getSession().getId();String uri request.getRequestURI();return noRepeatSubmit: sessionId : uri;} }在这个切面类中我们通过Around注解拦截所有标注了NoRepeatSubmit注解的方法。通过Redis我们为每个请求生成一个唯一的key并设置一个过期时间。如果在过期时间内再次提交相同的请求就会被拦截。 6. 创建示例Controller 创建一个简单的Controller用于测试防重复提交功能 package com.example.demo.controller;import com.example.demo.annotation.NoRepeatSubmit; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;RestController RequestMapping(/test) public class TestController {PostMapping(/submit)NoRepeatSubmit(expire 10) // 设置防重复提交时间为10秒public String submit() {return 提交成功;} }7. 测试 启动Spring Boot应用使用Postman或其他工具向/test/submit端点发送POST请求。第一次请求会成功但在10秒内重复发送相同请求将会被拦截并返回错误信息。 8. 进一步优化 8.1 自定义异常处理 为防重复提交功能添加自定义异常处理使其返回更加友好的错误信息 package com.example.demo.exception;import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController;ControllerAdvice RestController public class GlobalExceptionHandler {ExceptionHandler(RuntimeException.class)ResponseStatus(HttpStatus.BAD_REQUEST)public String handleRuntimeException(RuntimeException ex) {return ex.getMessage();} }8.2 提升Redis的健壮性 可以进一步优化Redis的配置如添加连接池、超时设置等以提升系统的健壮性和性能。 spring.redis.jedis.pool.max-active20 spring.redis.jedis.pool.max-idle10 spring.redis.jedis.pool.min-idle5 spring.redis.timeout20009. 总结 本文详细介绍了如何使用Spring Boot、AOP、注解和Redis实现防重复提交防抖功能。通过自定义注解和AOP切面我们能够方便地为指定的接口添加防重复提交功能避免数据重复插入等问题。 这种方法不仅实现简单而且通过Redis的高性能存储和快速读取特性能够有效地提升系统的性能和用户体验。在实际开发中可以根据具体需求进行进一步的优化和扩展。希望本文能对你有所帮助 结尾 ❤️ 感谢您的支持和鼓励 您可能感兴趣的内容 【Java面试技巧】Java面试八股文 - 掌握面试必备知识目录篇【Java学习路线】2023年完整版Java学习路线图【AIGC人工智能】Chat GPT是什么初学者怎么使用Chat GPT需要注意些什么【Java实战项目】SpringBootSSM实战打造高效便捷的企业级Java外卖订购系统【数据结构学习】从零起步学习数据结构的完整路径
http://www.w-s-a.com/news/106614/

相关文章:

  • 合肥市做网站多少钱wordpress网站布置视频
  • 中国建设人才网信息网站软件外包公司好不好
  • 网站建设与管理 市场分析上海网站建设公司排名
  • 怎么将公司网站设成首页网址关键词查询网站
  • 怎么用ps做网站ui邱县专业做网站
  • 国开行网站毕业申请怎么做大连旅顺口旅游攻略
  • 鲜花店网站源码成都专做婚介网站的公司
  • 合肥企业网站建设工哈尔滨公告
  • 华强北 做网站互联网服务平台入口
  • vi设计案例网站微信导航网站 dedecms
  • 青浦区做网站设计图片手绘图片
  • 做网站的基本功制作网站公司推荐
  • 阿里云快速建站教程个人网站 费用
  • 广东购物网站建设微信公众号制作模板免费
  • 阿里国际站韩语网站怎么做让移动网站
  • 北京外包做网站如何报价中国几大网络推广公司
  • 中国建设部网站关于资质wordpress 建app
  • 程序员找工作的网站哈尔滨建设信息网站
  • 公司 网站 方案高考写作网站
  • 网站后台如何登陆网站开发需求逻辑图
  • 市级档案网站建设情况分析server2008做DNS与网站
  • 公积金门户网站建设方案网站建设代理平台怎么做
  • 网站建设知识论文抖音开放平台是干什么的
  • 网站建设期末试卷大气简洁网站
  • 电子商务网站建设报告范文单位做网站怎么做
  • 优质的外国网站qq小程序在哪里打开
  • 商务网站建设与推广实训报告免费素材网站无水印
  • 外贸站seoapp开发公司历程概述
  • 沈阳网站推广¥做下拉去118cr陶瓷企业 瓷砖地板公司网站建设
  • 医院网站官方微信精神文明建设我做服装设计师的 求推荐资源网站