当前位置 博文首页 > 程序员石磊:Redis缓存切面,防止Redis宕机影响正常业务逻辑

    程序员石磊:Redis缓存切面,防止Redis宕机影响正常业务逻辑

    作者:[db:作者] 时间:2021-07-04 15:55

    标题很清楚了,不说了

    package com.raymon.hcp.security.aspect;
    
    import com.raymon.hcp.security.annotation.CacheException;
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.Signature;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Pointcut;
    import org.aspectj.lang.reflect.MethodSignature;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.core.annotation.Order;
    import org.springframework.stereotype.Component;
    
    import java.lang.reflect.Method;
    
    /**
     * Redis缓存切面,防止Redis宕机影响正常业务逻辑
     * Created by zhanglei on 2020/3/17.
     */
    @Aspect
    @Component
    @Order(2)
    public class RedisCacheAspect {
        private static Logger LOGGER = LoggerFactory.getLogger(RedisCacheAspect.class);
    
        @Pointcut("execution(public * com.raymon.hcp.portal.service.*CacheService.*(..)) || execution(public * com.raymon.hcp.service.*CacheService.*(..))")
        public void cacheAspect() {
        }
    
        @Around("cacheAspect()")
        public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
            Signature signature = joinPoint.getSignature();
            MethodSignature methodSignature = (MethodSignature) signature;
            Method method = methodSignature.getMethod();
            Object result = null;
            try {
                result = joinPoint.proceed();
            } catch (Throwable throwable) {
                //有CacheException注解的方法需要抛出异常
                if (method.isAnnotationPresent(CacheException.class)) {
                    throw throwable;
                } else {
                    LOGGER.error(throwable.getMessage());
                }
            }
            return result;
        }
    
    }
    
    
    cs