dongyukun
9 天以前 b2f92df3d631bf54c98afa779e2bed49f906721b
提交 | 用户 | 时间
e7c126 1 package com.iailab.framework.tenant.core.aop;
H 2
3 import com.iailab.framework.tenant.core.context.TenantContextHolder;
4 import com.iailab.framework.tenant.core.util.TenantUtils;
5 import lombok.extern.slf4j.Slf4j;
6 import org.aspectj.lang.ProceedingJoinPoint;
7 import org.aspectj.lang.annotation.Around;
8 import org.aspectj.lang.annotation.Aspect;
9
10 /**
11  * 忽略多租户的 Aspect,基于 {@link TenantIgnore} 注解实现,用于一些全局的逻辑。
12  * 例如说,一个定时任务,读取所有数据,进行处理。
13  * 又例如说,读取所有数据,进行缓存。
14  *
15  * 整体逻辑的实现,和 {@link TenantUtils#executeIgnore(Runnable)} 需要保持一致
16  *
17  * @author iailab
18  */
19 @Aspect
20 @Slf4j
21 public class TenantIgnoreAspect {
22
23     @Around("@annotation(tenantIgnore)")
24     public Object around(ProceedingJoinPoint joinPoint, TenantIgnore tenantIgnore) throws Throwable {
25         Boolean oldIgnore = TenantContextHolder.isIgnore();
26         try {
27             TenantContextHolder.setIgnore(true);
28             // 执行逻辑
29             return joinPoint.proceed();
30         } finally {
31             TenantContextHolder.setIgnore(oldIgnore);
32         }
33     }
34
35 }