{"repo":"houbb/resubmit","free":true,"listed":false,"github":"https://github.com/houbb/resubmit","clone":"git clone https://github.com/houbb/resubmit.git","description":"The repeat submit tool for java.(java 防止重复提交框架，支持注解。支持 spring, springboot 整合。)","language":"Java","stars":93,"topics":["resubmission","submit","spring-boot","springboot","springboot2","cache","lock","redis"],"license":"Apache-2.0","category":"databases-storage","readme_excerpt":"resubmit resubmit 是一款为 java 设计的渐进式防止重复提交框架。 推荐阅读： 面试官：你们的项目中是怎么做防止重复提交的？ resubmit 渐进式防重复提交框架简介 创作目的 有时候手动加防止重复提交很麻烦，每次手动编写不利于复用。 所以希望从从简到繁实现一个工具，便于平时使用。 特性 - 渐进式实现，可独立 spring 使用 - 基于注解+字节码，配置灵活 - 支持编程式的调用 - 支持注解式，完美整合 spring - 支持整合 spring-boot - 支持方法级别、类级别注解 变更日志 快速开始 maven 引入 注解说明 注解 @Resubmit 对应的属性如下，可以在方法或者类上。方法的级别优先于类。 属性 说明 默认值 :--------- :----------------- :----- value() 多久内禁止重复提交，单位为毫秒。 8000 enable() 是否启用 true 编码 - UserService.java - 测试代码 如果在指定时间差内，重复请求，则会抛出异常 ResubmitException 相同的参数直接提交2次，就会报错。 - 测试场景2 如果等待超过指定的 5s，就不会报错。 自定义 ResubmitProxy.getProxy(new UserService()); 可以获取 UserService 对应的代理。 等价于： 其中 ResubmitBs 作为引导类，对应的策略都支持自定义。 属性 说明 默认值 :--- :--- :--- cache() 缓存实现策略 默认为基于 ConcurrentHashMap 实现的基于内存的缓存实现 keyGenerator() key 实现策略，用于唯一标识一个方法+参数，判断是否为相同的提交 md5 策略 tokenGenerator() token 实现策略，用于唯一标识一个用户。 从 HttpServletRequest 中的 header 属性 resubmit token 中获取 spring 整合使用 maven 引入 代码编写 - UserService.java - SpringConfig.java @EnableResubmit 注解说明 @EnableResubmit 中用户可以指定对应的实现策略，便于更加灵活的适应业务场景。 和 ResubmitBs 中支持自定义的属性一一对应。 属性 说明 默认值 :--- :--- :--- cache() 缓存实现策略 默认为基于 ConcurrentHashMap 实现的基于内存的缓存实现 keyGenerator() key 实现策略，用于唯一标识一个方法+参数，判断是否为相同的提交 md5 策略 tokenGenerator() token 实现策略，用于唯一标识一个用户。 从 HttpServletRequest 中的 header 属性 resubmit token 中获取 测试代码 类级别例子 v1.2.0 注解支持在类级别指定。同时方法级别的优先级更高。 service 代码 测试类 整合 spring-boot maven 引入 代码实现 - UserService.java 这个方法实现和前面的一样。 - Application.java 启动入口 测试代码 自定义策略 上面提到 @EnableResubmit 中的策略支持自定义。 此处仅以 cache 为例，为了简单，默认是基于本地内存的缓存实现。 如果你不是单点应用，那么基于 redis ","default_branch":null,"files":null,"tree":[],"storefront":"/r/houbb","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/houbb/resubmit/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}