钟辉武 發表於 2025-5-31 16:02:00

resubmit v1.2.0 新特性支持类级别防止重复提交

<h1 id="前言">前言</h1>
<p>resubmit 是一款为 java 设计的渐进式防止重复提交框架。</p>
<h2 id="创作目的">创作目的</h2>
<p>有时候手动加防止重复提交很麻烦,每次手动编写不利于复用。</p>
<p>所以希望从从简到繁实现一个工具,便于平时使用。</p>
<h2 id="特性">特性</h2>
<ul>
<li>
<p>渐进式实现,可独立 spring 使用</p>
</li>
<li>
<p>基于注解+字节码,配置灵活</p>
</li>
<li>
<p>支持编程式的调用</p>
</li>
<li>
<p>支持注解式,完美整合 spring</p>
</li>
<li>
<p>支持整合 spring-boot</p>
</li>
<li>
<p>支持方法级别、类级别注解</p>
</li>
</ul>
<h1 id="快速开始">快速开始</h1>
<h2 id="maven-引入">maven 引入</h2>
<pre><code class="language-xml">&lt;dependency&gt;
    &lt;groupId&gt;com.github.houbb&lt;/groupId&gt;
    &lt;artifactId&gt;resubmit-springboot-starter&lt;/artifactId&gt;
    &lt;version&gt;1.2.0&lt;/version&gt;
&lt;/dependency&gt;
</code></pre>
<h2 id="测试代码">测试代码</h2>
<p>service 类</p>
<pre><code class="language-java">@Service
@Resubmit(value = 5000, enable = true)
public class ClassLevelService {

    @Resubmit(enable = false)
    public void queryInfoNoLimit(final String id) {
      System.out.println("queryInfoNoLimit: " + id);
    }

    public void queryInfoLimit(final String id) {
      System.out.println("queryInfoLimit: " + id);
    }

}
</code></pre>
<p>测试类</p>
<pre><code class="language-java">@ContextConfiguration(classes = SpringConfig.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class ResubmitSpringClassLevelTest {

    @Autowired
    private ClassLevelService classLevelService;

    @Test(expected = ResubmitException.class)
    public void queryInfoLimitTest() {
      classLevelService.queryInfoLimit("1");
      classLevelService.queryInfoLimit("1");
    }

    @Test
    public void queryInfoNoLimitTest() {
      classLevelService.queryInfoNoLimit("1");
      classLevelService.queryInfoNoLimit("1");
    }

}
</code></pre>
<p>如此就可以完成一个类级别支持的防重复提交。</p>
<h2 id="注解">注解</h2>
<p>注解 <code>@Resubmit</code> 对应的属性如下,可以在方法或者类上。方法的级别优先于类。</p>
<table>
<thead>
<tr>
<th style="text-align: left">属性</th>
<th style="text-align: left">说明</th>
<th style="text-align: left">默认值</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">value()</td>
<td style="text-align: left">多久内禁止重复提交,单位为毫秒。</td>
<td style="text-align: left">8000</td>
</tr>
<tr>
<td style="text-align: left">enable()</td>
<td style="text-align: left">是否启用</td>
<td style="text-align: left">true</td>
</tr>
</tbody>
</table>
<h1 id="拓展阅读">拓展阅读</h1>
<p>01-面试官:你们项目中是怎么做防重复提交的?</p>
<p>02-java 表单避免重复提交 resubmit 开源项目介绍</p>
<p>03-idempotent 幂等性介绍+如何防止重复提交?</p>
<p>04-简单聊一聊防重复提交</p>
<p>05-还在深夜加班改Bug?雷军都点赞的防重提方案来了!</p>
<p>06-v1.2.0 新特性类级别防止重复提交</p>
<h2 id="开源矩阵">开源矩阵</h2>
<p>下面是一些从防止重复提交相关,整个系列的开源矩阵规划。</p>
<table>
<thead>
<tr>
<th style="text-align: left">名称</th>
<th style="text-align: left">介绍</th>
<th style="text-align: left">状态</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">resubmit</td>
<td style="text-align: left">防止重复提交核心库</td>
<td style="text-align: left">已开源</td>
</tr>
<tr>
<td style="text-align: left">rate-limit</td>
<td style="text-align: left">限流核心库</td>
<td style="text-align: left">已开源</td>
</tr>
<tr>
<td style="text-align: left">cache</td>
<td style="text-align: left">手写渐进式 redis</td>
<td style="text-align: left">已开源</td>
</tr>
<tr>
<td style="text-align: left">lock</td>
<td style="text-align: left">开箱即用的分布式锁</td>
<td style="text-align: left">已开源</td>
</tr>
<tr>
<td style="text-align: left">common-cache</td>
<td style="text-align: left">通用缓存标准定义</td>
<td style="text-align: left">已开源</td>
</tr>
<tr>
<td style="text-align: left">redis-config</td>
<td style="text-align: left">兼容各种常见的 redis 配置模式</td>
<td style="text-align: left">研发中</td>
</tr>
<tr>
<td style="text-align: left">quota-server</td>
<td style="text-align: left">限额限次核心服务</td>
<td style="text-align: left">待开始</td>
</tr>
<tr>
<td style="text-align: left">quota-admin</td>
<td style="text-align: left">限额限次控台</td>
<td style="text-align: left">待开始</td>
</tr>
<tr>
<td style="text-align: left">flow-control-server</td>
<td style="text-align: left">流控核心服务</td>
<td style="text-align: left">待开始</td>
</tr>
<tr>
<td style="text-align: left">flow-control-admin</td>
<td style="text-align: left">流控控台</td>
<td style="text-align: left">待开始</td>
</tr>
</tbody>
</table><br><br>
来源:https://www.cnblogs.com/houbbBlogs/p/18905430
頁: [1]
查看完整版本: resubmit v1.2.0 新特性支持类级别防止重复提交