项目简介
Martian 是一个声明式 API 编程(DAP)框架,可以帮助你快速开发后端服务。
- 以HttpServer作为 http服务,彻底脱离Tomcat这一类的Web容器和Servlet,同时也让项目减少了几个依赖
- 声明式API,让Controller变成了一个interface,降低了开发的工作量
- 拥有其他web框架 拥有的大部分功能,比如AOP,IOC,声明式事务,异常监听等
- 拥有自主开发的持久层框架,并天然的集成到了Martian中
- 支持分布式开发
更新内容
在要加锁的方法上添加RedisLock注解
@RedisLock(key = "自己定义一个key", maxWait = 3000,
retry = true, retryRate = 100, timeOut = 1000)
public int insert(){
return 1;
}
这个锁会在事务开启之前获取,在事务提交以后解锁,并且只对MarsBean有效,对API和DAO无效
RedisLock注解的参数解释
- key: 唯一标识,保证全局唯一
- retry: 如果获取锁失败,是否重试(true 是,false 否),只有设置为true,下面的几个属性才生效 | 默认为 false
- retryRate: 重试频率(多少毫秒重试一次)| 默认100毫秒
- maxWait: 最大等待时间(重试多少毫秒以后,就放弃等待) | 默认3000毫秒
- timeOut: 失效时间(多少毫秒后,自动解锁) | 默认10000毫秒
如果你不需要锁住整个方法,只需要锁一小段代码,那么可以用下面的方式
在MarsBean里面注入MarsRedisLock对象
@MarsBean("testService")
public class TestService {
@MarsWrite("marsRedisLock")
private MarsRedisLock marsRedisLock;
}
加锁
LockModel lockModel = new LockModel();
ockModel.setKey("设置一个key,不同业务之间唯一,保证每次请求都是一样的key");
ockModel.setValue("设置一个唯一的value,每次请求都是唯一的");
// 失效时间
ockModel.setTimeOut(10000);
// 重试频率(每隔几毫秒重试一次)
ockModel.setRetryRate(300);
// 没获取到锁,是否重试
lockModel.setRetry(true);
// 最大重试时间(重试多久没成功,就直接放弃)
ockModel.setMaxWait(5000);
Boolean haslock = marsRedisLock.lock(lockModel);
if(haslock){
执行加锁后才能执行的代码
}
解锁
marsRedisLock.unlock(lockModel.getKey(), lockModel.getValue());
功能演示
注意:本文归作者所有,未经作者允许,不得转载