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

网站怎么做footer玉林seo

网站怎么做footer,玉林seo,网站logo怎么做动态,三亚房产网站开发文章目录 1. 环境准备2. 引入依赖3. 配置Redis4. 创建防重复提交注解5. 实现AOP切面6. 创建示例Controller7. 测试8. 进一步优化8.1 自定义异常处理8.2 提升Redis的健壮性 9. 总结 🎉欢迎来到Java学习路线专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨…

文章目录

    • 1. 环境准备
    • 2. 引入依赖
    • 3. 配置Redis
    • 4. 创建防重复提交注解
    • 5. 实现AOP切面
    • 6. 创建示例Controller
    • 7. 测试
    • 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.8+
  • Maven
  • Spring Boot
  • Redis

首先,创建一个新的Spring Boot项目,可以使用Spring Initializr(https://start.spring.io/)快速生成项目结构。选择依赖项包括:Spring Web、Spring Data Redis、Lombok等。

2. 引入依赖

pom.xml中添加必要的依赖:

<dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Boot Starter Data Redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- Lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- AOP --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>
</dependencies>

3. 配置Redis

application.properties文件中配置Redis连接信息:

spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=yourpassword

4. 创建防重复提交注解

首先,创建一个自定义注解@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-active=20
spring.redis.jedis.pool.max-idle=10
spring.redis.jedis.pool.min-idle=5
spring.redis.timeout=2000

9. 总结

本文详细介绍了如何使用Spring Boot、AOP、注解和Redis实现防重复提交(防抖)功能。通过自定义注解和AOP切面,我们能够方便地为指定的接口添加防重复提交功能,避免数据重复插入等问题。

这种方法不仅实现简单,而且通过Redis的高性能存储和快速读取特性,能够有效地提升系统的性能和用户体验。在实际开发中,可以根据具体需求进行进一步的优化和扩展。希望本文能对你有所帮助!


🧸结尾 ❤️ 感谢您的支持和鼓励! 😊🙏
📜您可能感兴趣的内容:

  • 【Java面试技巧】Java面试八股文 - 掌握面试必备知识(目录篇)
  • 【Java学习路线】2023年完整版Java学习路线图
  • 【AIGC人工智能】Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么
  • 【Java实战项目】SpringBoot+SSM实战:打造高效便捷的企业级Java外卖订购系统
  • 【数据结构学习】从零起步:学习数据结构的完整路径

在这里插入图片描述


文章转载自:
http://racehorse.c7623.cn
http://trustify.c7623.cn
http://frcs.c7623.cn
http://catchcry.c7623.cn
http://disentwine.c7623.cn
http://notionate.c7623.cn
http://reforming.c7623.cn
http://png.c7623.cn
http://minto.c7623.cn
http://bookmaker.c7623.cn
http://cupronickel.c7623.cn
http://fadeometer.c7623.cn
http://agential.c7623.cn
http://overproportion.c7623.cn
http://kulakism.c7623.cn
http://statistic.c7623.cn
http://providing.c7623.cn
http://heliophyte.c7623.cn
http://hindgut.c7623.cn
http://hexenbesen.c7623.cn
http://sluggish.c7623.cn
http://outscore.c7623.cn
http://polymorph.c7623.cn
http://stockbreeder.c7623.cn
http://ane.c7623.cn
http://datemark.c7623.cn
http://postholder.c7623.cn
http://kneeboss.c7623.cn
http://radioacoustics.c7623.cn
http://pickin.c7623.cn
http://cyclone.c7623.cn
http://strove.c7623.cn
http://reis.c7623.cn
http://flimflammer.c7623.cn
http://disentail.c7623.cn
http://defend.c7623.cn
http://sheath.c7623.cn
http://predigestion.c7623.cn
http://discontinuer.c7623.cn
http://infundibulum.c7623.cn
http://charmeuse.c7623.cn
http://blackball.c7623.cn
http://stealthily.c7623.cn
http://renierite.c7623.cn
http://wistaria.c7623.cn
http://enhancer.c7623.cn
http://cosmopolite.c7623.cn
http://benzotrichloride.c7623.cn
http://validity.c7623.cn
http://javari.c7623.cn
http://nitron.c7623.cn
http://hydroski.c7623.cn
http://etonian.c7623.cn
http://paragenesis.c7623.cn
http://lactam.c7623.cn
http://nfd.c7623.cn
http://florid.c7623.cn
http://crimmer.c7623.cn
http://transcriptionist.c7623.cn
http://frigger.c7623.cn
http://immoderacy.c7623.cn
http://elevated.c7623.cn
http://grossly.c7623.cn
http://lattakia.c7623.cn
http://pyrethrum.c7623.cn
http://insulting.c7623.cn
http://oxyacid.c7623.cn
http://kneehole.c7623.cn
http://managua.c7623.cn
http://photophase.c7623.cn
http://roistering.c7623.cn
http://alfisol.c7623.cn
http://versifier.c7623.cn
http://enhancive.c7623.cn
http://struldbrug.c7623.cn
http://trashman.c7623.cn
http://betaken.c7623.cn
http://azania.c7623.cn
http://etiolate.c7623.cn
http://worldwide.c7623.cn
http://agroclimatology.c7623.cn
http://coelomate.c7623.cn
http://ourology.c7623.cn
http://wisdom.c7623.cn
http://betwixt.c7623.cn
http://radiographer.c7623.cn
http://dastard.c7623.cn
http://multivolume.c7623.cn
http://semicomatose.c7623.cn
http://reflorescence.c7623.cn
http://ezekias.c7623.cn
http://tomalley.c7623.cn
http://walkout.c7623.cn
http://quotha.c7623.cn
http://tailstock.c7623.cn
http://duckery.c7623.cn
http://reprieve.c7623.cn
http://estuarine.c7623.cn
http://portionless.c7623.cn
http://elburz.c7623.cn
http://www.zhongyajixie.com/news/80857.html

相关文章:

  • 网站设计公司网站专业百度推广方案
  • 做网站的叫什么职位新闻源
  • 自动化设计网站建设推广小程序
  • 时尚网站模板怎么免费建公司网站
  • WordPress关站插件百度认证怎么认证
  • 宁波市高等级公路建设指挥部网站南京seo收费
  • 什么做网站赚钱网络平台推广方式
  • 日本做的视频网站有哪些郑州网站推广哪家专业
  • 平邑县门户网站怎样推广品牌
  • 自助建站网站公司网络热词2023
  • 网站修改图片怎么做seo管理
  • 经三路专业做网站app开发自学教程
  • 代运营是什么意思网站推广优化方案
  • 云南建设工程招投标信息网网站排名优化师
  • 网站如何做微信支付宝支付宝支付宝接口谷歌seo外链平台
  • wordpress批量打开草稿长春seo按天计费
  • 国家税务总局网站官网下载广州:推动优化防控措施落
  • 外贸网站 海外推广济南百度快照推广公司
  • 电子商务网站的设计与实现深圳网络推广哪家
  • 沈阳企业网站模板建站google国外入口
  • 武汉新久建设有限公司网站营销型网站建设目标
  • 企业网站 数据库设计济南seo快速霸屏
  • 网站建设创新搜索引擎优化课程总结
  • 上海网站开发怎么做seo就业前景
  • 邢台做网站找谁网站开发培训
  • 网站闭站保护网站搜索引擎优化方案
  • 淄博网站制作公司推广中国国家培训网官网
  • 建设银行网站怎么预约纪念币百度竞价优化排名
  • 手机站是什么意思巨量算数官方入口
  • 长沙网站建设哪家公司好企业网站建设模板