当前位置: 首页 > news >正文

网站开发 0755html做调查问卷网站

网站开发 0755,html做调查问卷网站,哈尔滨 高端网站建设,做ppt的网站 知乎基于Redis加锁注解AOP解决JOB重复执行问题 现象解决方案自定义注解定义AOP策略redis 加锁实践 现象 线上xxljob有时候会遇到同一个任务在调度的时候重复执行#xff0c;如下图#xff1a; 线上JOB服务运行了2个实例#xff0c;有时候会重复调度到同一个实例#xff0c;有… 基于Redis加锁注解AOP解决JOB重复执行问题 现象解决方案自定义注解定义AOP策略redis 加锁实践 现象 线上xxljob有时候会遇到同一个任务在调度的时候重复执行如下图 线上JOB服务运行了2个实例有时候会重复调度到同一个实例有时候会重复调度到不同实例上对于Job重复执行会存在很多风险可以采用Redis加锁的方式来解决。这里用统一的方式提供这个内部功能其他Job或者从管理页面进来的请求直接执行Job可以都限制住保证同一时间分布式环境中只有一个实例在运行。 解决方案 自定义注解 首先定义一个自定义注解将redis加锁需要的参数可以通过注解声明 Target({ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) public interface JobNoRepete { String name(); String redisKey(); long expireTime(); TimeUnit timeUnit(); }定义AOP策略 Component Aspect Slf4j public class JobNoRepeteAop { Resourceprivate RedisService redisService; Around(value annotation(annotation), argNames pj,annotation)public Object around(ProceedingJoinPoint pj, JobRepetitionDefense annotation) throws Throwable {String name annotation.name();String redisKey annotation.redisKey();long expireTime annotation.expireTime();TimeUnit timeUnit annotation.timeUnit();log.info(job执行防重开始执行,name{},redisKey{},expireTime{},timeUnit{},name, redisKey, expireTime, timeUnit);try {return redisService.executeOnlyOnce(redisKey, expireTime, timeUnit, pj::proceed);} finally {log.info(job执行防重执行完成,name{}, name);}}}redis 加锁 redis 加锁逻辑使用spring redis中的StringRedisTemplate Slf4j Component public class RedisService {Resourceprivate StringRedisTemplate stringRedisTemplate;public T T executeOnlyOnce(String redisKey, long expireTime, TimeUnit timeUnit, CustomCallableT callable) throws Throwable {if (StrUtil.isBlank(redisKey) || expireTime 0 || Objects.isNull(timeUnit) || Objects.isNull(callable)) {throw new IllegalArgumentException(参数错误);}String uuid UUID.randomUUID().toString();if (!stringRedisTemplate.opsForValue().setIfAbsent(redisKey, uuid, expireTime, timeUnit)) {throw new RuntimeException(任务正在执行,请稍后再试);}//执行逻辑try {return callable.call();} finally {//执行完成主动释放锁try {String oldValue stringRedisTemplate.opsForValue().get(redisKey);if (Objects.equals(uuid, oldValue)) {stringRedisTemplate.delete(redisKey);}} catch (Exception e) {//释放锁失败等待expireTime后自动释放log.error(释放锁异常, e);}}} } public interface CustomCallableV {V call() throws Throwable; }实践 对于适用的场景就可以直接使用注解的方式进行声明例如 Service Slf4j public class testService { private static final int EXPIRE_HOURS 24; JobNoRepete(name 测试redis, redisKey Constant.JOB_LOCK_TO_REDIS,expireTime EXPIRE_HOURS, timeUnit TimeUnit.HOURS)public void test(LocalDate localDate) {//内部逻辑} }
http://www.hkea.cn/news/14430262/

相关文章:

  • 竞品网站分析如何做网站管理
  • 国内无代码和低代码平台.net 网站优化
  • 17zwd一起做网站教学视频个人网站有备案吗
  • 金融公司网站建设模板虚拟机做的网站怎么让外网访问不了
  • p2p网站建设源码毕业设计网站设计说明书
  • 怎么看别人网站怎么做的个人网站主页模板
  • 做网站卖赚钱吗腾讯企业邮箱登录入口下载
  • 做商城网站那个好wordpress图片缝隙
  • 如何做网站内容管理有做网站动态效果软件
  • 申请域名之后如何做网站小企业网站建设制作平台
  • 英铭网站建设襄阳seo费用
  • 站酷logo设计商城网站建设策划方案
  • l临沂互助系统网站开发奎文营销型网站建设
  • 济南网站优化厂家支付行业的网站怎么做
  • 海南高端网站建设网站建设主机耗电量
  • 外贸网站建设的败笔怎样做个做外贸的网站
  • 设计网站公司搜索y湖南岚鸿知名南京网站建设知识
  • 请多记几个本站域名防止失联南宁网约车租赁公司
  • 厦门建设工程信息造价网站邢台网站改版开发
  • 网站推广服务好公司排名网站词库怎么做
  • 如何为企业做网站成都网站建设冠辰哪家强
  • 广州网站建设建设网站设计方案和技巧
  • 河南生产型企业网站建设肇东网页设计
  • 百石网怎么做网站做网站学好哪些软件
  • 韩国食品网站设计欣赏wordpress动静分离
  • 单页设计网站app网站平台建设方案
  • 网站怎么百度收录天津哪里能做网站
  • 邢台营销型网站建设济南市建设行政主管部门网站
  • jsp网站 值班功能惠州市seo上词
  • 廊坊网站关键词优化网站ui案例