From 1be09d092bf18c641f6391900bba8beca142749e Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 24 Sep 2022 12:26:01 +0800 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=E4=BC=98=E5=8C=96=E2=80=9C?= =?UTF-8?q?=E9=80=9A=E8=BF=87=E6=B3=A8=E8=A7=A3=E5=A2=9E=E5=8A=A0=E5=A4=9A?= =?UTF-8?q?=E7=A7=9F=E6=88=B7=E7=BC=93=E5=AD=98=E2=80=9D=E7=9A=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yudao-dependencies/pom.xml | 2 +- .../config/YudaoTenantAutoConfiguration.java | 24 +++++--------- .../core/redis/TenantRedisCacheManager.java | 33 ++++++++++--------- .../yudao-spring-boot-starter-redis/pom.xml | 1 - .../src/main/resources/application-local.yaml | 4 +-- 5 files changed, 30 insertions(+), 34 deletions(-) diff --git a/yudao-dependencies/pom.xml b/yudao-dependencies/pom.xml index 866763d0a..bd90ad8e7 100644 --- a/yudao-dependencies/pom.xml +++ b/yudao-dependencies/pom.xml @@ -58,7 +58,7 @@ 0.1.55 2.4.1 1.3.0 - 4.1.75.Final + 4.1.82.Final 8.2.2 4.6.0 diff --git a/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/config/YudaoTenantAutoConfiguration.java b/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/config/YudaoTenantAutoConfiguration.java index 8911f49d5..7958b7a44 100644 --- a/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/config/YudaoTenantAutoConfiguration.java +++ b/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/config/YudaoTenantAutoConfiguration.java @@ -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 redisTemplate, - RedisCacheConfiguration redisCacheConfiguration) { - RedisCacheWriter cacheWriter = - RedisCacheWriter.nonLockingRedisCacheWriter( - Objects.requireNonNull(redisTemplate.getConnectionFactory())); + @Bean + @Primary // 引入租户时,tenantRedisCacheManager 为主 Bean + public RedisCacheManager tenantRedisCacheManager(RedisTemplate redisTemplate, + RedisCacheConfiguration redisCacheConfiguration) { + // 创建 RedisCacheWriter 对象 + RedisConnectionFactory connectionFactory = Objects.requireNonNull(redisTemplate.getConnectionFactory()); + RedisCacheWriter cacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory); + // 创建 TenantRedisCacheManager 对象 return new TenantRedisCacheManager(cacheWriter, redisCacheConfiguration); } diff --git a/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/redis/TenantRedisCacheManager.java b/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/redis/TenantRedisCacheManager.java index fa5adfa4d..10d62232d 100644 --- a/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/redis/TenantRedisCacheManager.java +++ b/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/redis/TenantRedisCacheManager.java @@ -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); - } } diff --git a/yudao-framework/yudao-spring-boot-starter-redis/pom.xml b/yudao-framework/yudao-spring-boot-starter-redis/pom.xml index 5c14c02fd..430ede255 100644 --- a/yudao-framework/yudao-spring-boot-starter-redis/pom.xml +++ b/yudao-framework/yudao-spring-boot-starter-redis/pom.xml @@ -35,7 +35,6 @@ io.netty netty-all - 4.1.75.Final diff --git a/yudao-server/src/main/resources/application-local.yaml b/yudao-server/src/main/resources/application-local.yaml index c26354ead..197649b5e 100644 --- a/yudao-server/src/main/resources/application-local.yaml +++ b/yudao-server/src/main/resources/application-local.yaml @@ -51,7 +51,7 @@ spring: # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=${spring.datasource.dynamic.datasource.master.name} # SQLServer 连接的示例 username: root - password: 123456 + password: ${RUOYI_VUE_PRO} # username: sa # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W slave: # 模拟从库,可根据自己需要修改 @@ -62,7 +62,7 @@ spring: # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=${spring.datasource.dynamic.datasource.slave.name} # SQLServer 连接的示例 username: root - password: 123456 + password: ${RUOYI_VUE_PRO} # username: sa # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W