zoukankan      html  css  js  c++  java
  • 微服务分布式锁

    分布式锁切面类

    /**
     * Redis缓存分布式锁切面类
     * created by huangbaidong
     * created date 2017-03-30
     */
    @Aspect
    @Component
    public class RedisCacheDistributedLockAspect {
        public static final Logger LOG = Logger.getLogger(RedisCacheDistributedLockAspect.class);
    
        @Value("${time.server.port}")
        private Integer port;
        @Value("${time.server.host}")
        private String host;
        
        @Resource
        private RedisUtil redisUtil;
    
        protected RedisBasedDistributedLock payingOrderLock = null;
        private static final String PAYING_ORDER_LOCK_KEY = "paying.order.lock";
        private static final long LOCK_EXPIRE = 5 * 1000;
    
        /**
         * 初始化锁信息
         */
        @PostConstruct
        public void init() {
            try {
                //时间服务器地址信息
                SocketAddress addr = new InetSocketAddress(host, port);
                //初始化锁
                payingOrderLock = new RedisBasedDistributedLock(redisUtil, PAYING_ORDER_LOCK_KEY, LOCK_EXPIRE, addr);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    
    
        /**
         * 在需要同步的方法前后加锁
         * @param jp
         * @return
         * @throws Throwable
         */
        @Around("execution(* com.coracle.positec.cache.impl.BsdOrderCacheImpl.add*(..))" +
                "|| execution(* com.coracle.positec.cache.impl.BsdOrderCacheImpl.remove*(..))" +
                "|| execution(* com.coracle.positec.cache.impl.BsdOrderCacheImpl.update*(..))" +
                "|| execution(* com.coracle.positec.cache.impl.BsdOrderCacheImpl.load*(..))")
        public Object payingOrderSyncLock(ProceedingJoinPoint jp) throws Throwable {
            Object o = null;
            if(payingOrderLock.tryLock(3, TimeUnit.SECONDS)) {
                try {
                    o = jp.proceed(jp.getArgs());
                } finally {
                    payingOrderLock.unlock();
                }
            }
            return o;
        }
    }
  • 相关阅读:
    js之数组的方法
    js之选项卡
    js之数据类型的比较
    Android sharedUserId研究记录
    直接拿来用!最火的Android开源项目(一)
    [转]简约而不简单——Android SimpleAdapter
    [转]Android GC机制及一些调试信息
    sendToTarget 和 sendMessage 区别
    Android中内容观察者的使用---- ContentObserver类详解 (转)
    Inflate()
  • 原文地址:https://www.cnblogs.com/cocoat/p/6648194.html
Copyright © 2011-2022 走看看