mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 10:18:42 +08:00 
			
		
		
		
	♻️优化“通过注解增加多租户缓存”的代码
This commit is contained in:
		| @@ -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); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -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); | ||||
|   } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV