多租户架构设计
在SaaS平台里,多个租户共用一套应用,数据隔离是核心。我们选了共享数据库、独立Schema的方案——在资源利用率和隔离性之间找了个平衡。
租户上下文传递
用ThreadLocal保存当前请求的租户ID,结合AOP从请求头里拿出来。
public class TenantContext {
private static final ThreadLocal<String> currentTenant = new ThreadLocal<>();
public static void setTenantId(String tenantId) {
currentTenant.set(tenantId);
}
public static String getTenantId() {
return currentTenant.get();
}
public static void clear() {
currentTenant.remove();
}
}
@Aspect
@Component
public class TenantAspect {
@Before("execution(* com.jeespring..service..*.*(..))")
public void beforeService() {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String tenantId = request.getHeader("X-Tenant-ID");
TenantContext.setTenantId(tenantId);
}
@After("execution(* com.jeespring..service..*.*(..))")
{
TenantContext.clear();
}
}

