同步操作将从 yangspgao/distributed-lock 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
A:分布式锁
B:防重复提交
一个通过redis 或 zookeeper等集中式存储而实现的弱一致性分布式锁;以及在此基础上实现的防重复提交功能;
通过@EnableDistributedLock 注解开启分布式锁
通过@EnableResubmit 注解开启防重复提交功能
目前暂时只支持redis; 后期可扩展至zookeeper;
弱一致性:依赖redis服务器的稳定性,如果加锁成功,对应reids服务器down掉,又重启,就有可能导致锁失效;
目前只支持spring boot项目
项目引用redis,并创建redis对应的bean:RedisTemplate或JedisCluster 任一bean即可
A: SpringBoot main class中引入注解:@EnableDistributedLock
@SpringBootApplication
@EnableDistributedLock //启动分布式锁(前提:项目中已经存在RedisTemplate或JedisCluster对应的bean)
public class App
{
public static void main( String[] args )
{
//启动项目
SpringApplication.run(App.class,args);
}
}
B: 业务代码
//业务bean中引用lockManager
@Autowired
LockManager lockManager;
//业务代码中使用lock
DistributedLock lock = lockManager.getLock();
try{
boolean locked = lock.tryLock(key,50);
if(locked){
//... 业务
}
}finaly{
boolean unlocked = lock.unlock();
}
防重复提交
A: SpringBoot main class中引入注解:@EnableResubmit
@SpringBootApplication
@EnableResubmit
public class App
{
public static void main( String[] args )
{
//启动项目
SpringApplication.run(App.class,args);
}
}
B: 业务代码
业务方法上,使用@Resubmit注解;lockey:可以通过 spEL表达式获取方法参数中的值做为锁; expireSeconds 为锁过期时间,默认5秒;
@Resubmit(lockPrefix = "resubmit:pre:" ,lockKey = "#name",expireSeconds = 5)
public String resubmit(String name){
return "name";
}
C:重复提交处理 aop拦截到重复提交后,通过ResubmitResolver进行处理; 默认会创建三个Resolver bean:
默认使用的Resolver,可能通过@EnableResubmit(defaultResolver = {PrintResolver.class})指定
自定义Resolver: 实际业务中,除了使用统一的默认Resolver外,部分业务可能需要特殊的Resovler,此时可以由业务方开发自己的,实现了ResubmitResolver接口的Resolver;
@Resubmit(lockKey = "#name",resolver = PrintResolver.class)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。