Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/power4j/idempotent-guard
https://github.com/power4j/idempotent-guard
Last synced: 6 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/power4j/idempotent-guard
- Owner: power4j
- License: apache-2.0
- Created: 2023-03-13T08:47:29.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2023-11-11T01:56:32.000Z (about 1 year ago)
- Last Synced: 2023-11-11T02:21:33.627Z (about 1 year ago)
- Language: Java
- Size: 113 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.power4j/idempotent-guard/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.power4j/idempotent-guard)
## Idempotent Guard保护后端业务,防止前端重复提交。
## 使用方式
在你的应用中注册一个异常转换器,重复请求被拦截后会触发。
```java
@Bean
GuardExceptionTranslator guardExceptionTranslator(){
return e -> Results.of(-1,"请勿重复提交");
}
```> 通常情况下,你还需要写一个`@RestControllerAdvice`,否则前端会得到500错误。
例子
```java
@LockGuard(operation = "create",time = 15,resources = {
@ResDescribe(name = "username",expr = "#dto.username")
})
@PostMapping("/users")
public Result createUser(@RequestBody UserDTO dto) {
return Results.ok();
}
```效果: 根据请求中的`username`值和操作ID`create`,创建一个锁,如果此方法尚未执行结束,再次请求这个接口会被服务端拒绝。
## 模块
### idempotent-guard-jdbc
使用数据库来模拟分布式锁,功能:
- 支持锁超时,即使程序发生bug未能释放锁,在到超时时间后,自动解除
- 自带后台清除线程,自动清除过期的锁局限性
- 锁不可重入,因此不要在服务层使用,应该在Controller方法上使用
## 配置
```yaml
idempotent-guard:
enabled: true # 开关,默认true
# 全局配置
global-config:
lock-expire: 30 锁的过期时间(秒)
# 使用数据库时的配置
jdbc:
table-name: lock_guard # 表名称,默认 lock_guard
clear-job-delay: 30 # 后台清理任务的执行间隔,默认30s
clear-expire-extra: 30 # 清理过期锁的额外时间,默认30s```