新聞中心
springboot中如何防止重復(fù)提交,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
創(chuàng)新互聯(lián)公司憑借在網(wǎng)站建設(shè)、網(wǎng)站推廣領(lǐng)域領(lǐng)先的技術(shù)能力和多年的行業(yè)經(jīng)驗(yàn),為客戶提供超值的營銷型網(wǎng)站建設(shè)服務(wù),我們始終認(rèn)為:好的營銷型網(wǎng)站就是好的業(yè)務(wù)員。我們已成功為企業(yè)單位、個人等客戶提供了成都網(wǎng)站制作、網(wǎng)站建設(shè)服務(wù),以良好的商業(yè)信譽(yù),完善的服務(wù)及深厚的技術(shù)力量處于同行領(lǐng)先地位。
服務(wù)器端實(shí)現(xiàn)方案:同一客戶端在2秒內(nèi)對同一URL的提交視為重復(fù)提交
上代碼吧
pom.xml
Application.java
package com;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;/** * @author www.gaozz.club * @功能描述 防重復(fù)提交 * @date 2018-08-26 */@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}
自定義注解NoRepeatSubmit.java
package com.common;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) // 運(yùn)行時有效/** * @功能描述 防止重復(fù)提交標(biāo)記注解 * @author www.gaozz.club * @date 2018-08-26 */public @interface NoRepeatSubmit {}
aop解析注解NoRepeatSubmitAop.java
package com.common;import javax.servlet.http.HttpServletRequest;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;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.stereotype.Component;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;import com.google.common.cache.Cache;@Aspect@Component/** * @功能描述 aop解析注解 * @author www.gaozz.club * @date 2018-08-26 */public class NoRepeatSubmitAop { private Log logger = LogFactory.getLog(getClass()); @Autowired private Cache
緩存類
package com.common;import java.util.concurrent.TimeUnit;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import com.google.common.cache.Cache;import com.google.common.cache.CacheBuilder;@Configuration/** * @功能描述 內(nèi)存緩存 * @author www.gaozz.club * @date 2018-08-26 */public class UrlCache { @Bean public Cache
測試Controller
package com.example;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import com.common.NoRepeatSubmit;/** * @功能描述 測試Controller * @author www.gaozz.club * @date 2018-08-26 */@RestControllerpublic class TestController { @RequestMapping("/test") @NoRepeatSubmit public String test() { return ("程序邏輯返回"); }}
瀏覽器輸入http://localhost:8080/test
然后F5刷新查看效果
以下為新版內(nèi)容:解決了程序集群部署時請求可能會落到多臺機(jī)器上的問題,把內(nèi)存緩存換成了redis
application.yml
spring: redis: host: 192.168.1.92 port: 6379 password: 123456
RedisConfig.java
package com.common;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.RedisStandaloneConfiguration;import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;import org.springframework.data.redis.core.RedisTemplate;@Configurationpublic class RedisConfig { @Bean @ConfigurationProperties(prefix = "spring.redis") public JedisConnectionFactory getConnectionFactory() { return new JedisConnectionFactory(new RedisStandaloneConfiguration(), JedisClientConfiguration.builder().build()); } @Bean
調(diào)整切面類NoRepeatSubmitAop.java
package com.common;import javax.servlet.http.HttpServletRequest;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;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.RedisTemplate;import org.springframework.data.redis.core.ValueOperations;import org.springframework.stereotype.Component;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;@Aspect@Component/** * @功能描述 aop解析注解 * @author www.gaozz.club * @date 2018-11-02 */public class NoRepeatSubmitAop { private Log logger = LogFactory.getLog(getClass()); @Autowired private RedisTemplate
看完上述內(nèi)容,你們掌握springboot中如何防止重復(fù)提交的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
分享標(biāo)題:springboot中如何防止重復(fù)提交
文章地址:http://www.ef60e0e.cn/article/pppdji.html