♻️优化“通过注解增加多租户缓存”的代码

This commit is contained in:
YunaiV
2022-09-24 12:26:01 +08:00
parent 597a923828
commit 1be09d092b
5 changed files with 30 additions and 34 deletions

View File

@ -30,6 +30,7 @@ import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.cache.RedisCacheWriter;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import java.util.Objects;
@ -118,21 +119,14 @@ public class YudaoTenantAutoConfiguration {
};
}
/**
* 引入租户时tenantRedisCacheManager为主Bean
*
* @param redisTemplate
* @param redisCacheConfiguration
* @return
*/
@Bean
@Primary
public RedisCacheManager tenantRedisCacheManager(
RedisTemplate<String, Object> redisTemplate,
RedisCacheConfiguration redisCacheConfiguration) {
RedisCacheWriter cacheWriter =
RedisCacheWriter.nonLockingRedisCacheWriter(
Objects.requireNonNull(redisTemplate.getConnectionFactory()));
@Bean
@Primary // 引入租户时tenantRedisCacheManager 为主 Bean
public RedisCacheManager tenantRedisCacheManager(RedisTemplate<String, Object> redisTemplate,
RedisCacheConfiguration redisCacheConfiguration) {
// 创建 RedisCacheWriter 对象
RedisConnectionFactory connectionFactory = Objects.requireNonNull(redisTemplate.getConnectionFactory());
RedisCacheWriter cacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory);
// 创建 TenantRedisCacheManager 对象
return new TenantRedisCacheManager(cacheWriter, redisCacheConfiguration);
}

View File

@ -2,34 +2,37 @@ package cn.iocoder.yudao.framework.tenant.core.redis;
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.springframework.cache.Cache;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.cache.RedisCacheWriter;
/**
* 租户缓存管理
* 租户的 {@link RedisCacheManager} 实现类
*
* 为cacheName增加自动增加租户表示,格式name+":"+tenantId
* 操作指定 name 的 {@link Cache} 时,自动拼接租户后缀,格式name + ":" + tenantId
*
* @author airhead
*/
@Slf4j
public class TenantRedisCacheManager extends RedisCacheManager {
public TenantRedisCacheManager(
RedisCacheWriter cacheWriter, RedisCacheConfiguration defaultCacheConfiguration) {
super(cacheWriter, defaultCacheConfiguration);
}
@Override
public Cache getCache(String name) {
//租户未设置时返回原始name
if (TenantContextHolder.getTenantId() == null) {
return super.getCache(name);
public TenantRedisCacheManager(RedisCacheWriter cacheWriter,
RedisCacheConfiguration defaultCacheConfiguration) {
super(cacheWriter, defaultCacheConfiguration);
}
@Override
public Cache getCache(@NotNull String name) {
// 如果开启多租户,则 name 拼接租户后缀
if (!TenantContextHolder.isIgnore()
&& TenantContextHolder.getTenantId() != null) {
name = name + ":" + TenantContextHolder.getTenantId();
}
// 继续基于父方法
return super.getCache(name);
}
name = name + ":" + TenantContextHolder.getTenantId();
return super.getCache(name);
}
}