From dedc085efbef6330d203c9c8678095c25055fd72 Mon Sep 17 00:00:00 2001 From: fengshuonan Date: Mon, 17 May 2021 17:05:35 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=907.0.4=E3=80=91=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E7=9A=84=E6=8B=93=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/constants/ScannerConstants.java | 2 +- .../system-business-resource/pom.xml | 15 +++++ ...rceCache.java => MemoryResourceCache.java} | 45 +++++--------- .../resource/cache/RedisResourceCache.java | 58 ++++++++++++++++++ .../resource/factory/ResourceFactory.java | 24 ++++++++ .../service/impl/SysResourceServiceImpl.java | 13 ++-- .../GunsResourceCacheAutoConfiguration.java | 61 +++++++++++++++++++ .../main/resources/META-INF/spring.factories | 3 +- 8 files changed, 184 insertions(+), 37 deletions(-) rename kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/cache/{ResourceCache.java => MemoryResourceCache.java} (56%) create mode 100644 kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/cache/RedisResourceCache.java create mode 100644 kernel-s-system/system-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/system/starter/GunsResourceCacheAutoConfiguration.java diff --git a/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/constants/ScannerConstants.java b/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/constants/ScannerConstants.java index b219b8bb7..9c422509c 100644 --- a/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/constants/ScannerConstants.java +++ b/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/constants/ScannerConstants.java @@ -45,7 +45,7 @@ public interface ScannerConstants { /** * 资源前缀标识 */ - String RESOURCE_CACHE_KEY = "GUNS_RESOURCE_CACHES"; + String RESOURCE_CACHE_KEY = "GUNS_RESOURCE_CACHES:"; /** * 资源汇报的监听器的顺序 diff --git a/kernel-s-system/system-business-resource/pom.xml b/kernel-s-system/system-business-resource/pom.xml index 1bafc4a33..1182d38bc 100644 --- a/kernel-s-system/system-business-resource/pom.xml +++ b/kernel-s-system/system-business-resource/pom.xml @@ -32,6 +32,21 @@ 7.0.4 + + + + cn.stylefeng.roses + cache-sdk-memory + 7.0.4 + true + + + cn.stylefeng.roses + cache-sdk-redis + 7.0.4 + true + + diff --git a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/cache/ResourceCache.java b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/cache/MemoryResourceCache.java similarity index 56% rename from kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/cache/ResourceCache.java rename to kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/cache/MemoryResourceCache.java index eeb79d58f..0a4a66fec 100644 --- a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/cache/ResourceCache.java +++ b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/cache/MemoryResourceCache.java @@ -24,50 +24,35 @@ */ package cn.stylefeng.roses.kernel.system.modular.resource.cache; +import cn.hutool.cache.impl.TimedCache; +import cn.stylefeng.roses.kernel.cache.memory.AbstractMemoryCacheOperator; +import cn.stylefeng.roses.kernel.scanner.api.constants.ScannerConstants; import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ResourceDefinition; -import cn.stylefeng.roses.kernel.system.modular.resource.entity.SysResource; -import cn.stylefeng.roses.kernel.system.modular.resource.factory.ResourceFactory; -import org.springframework.stereotype.Component; -import java.util.ArrayList; -import java.util.List; +import java.util.Map; + /** - * 资源缓存 + * 基于内存的资源缓存 * * @author fengshuonan - * @date 2019-09-10-17:29 + * @date 2021/5/17 16:05 */ -@Component -public class ResourceCache { - - private final List resourceDefinitions = new ArrayList<>(); +public class MemoryResourceCache extends AbstractMemoryCacheOperator> { /** - * 保存资源存储到缓存 + * TimedCache的key是appCode,value的key是资源url,value是ResourceDefinition * * @author fengshuonan - * @date 2020/11/24 20:06 + * @date 2021/5/17 16:06 */ - public void saveResourcesToCache(List sysResources) { - if (sysResources == null || sysResources.size() == 0) { - return; - } - - for (SysResource sysResource : sysResources) { - ResourceDefinition resourceDefinition = ResourceFactory.createResourceDefinition(sysResource); - resourceDefinitions.add(resourceDefinition); - } + public MemoryResourceCache(TimedCache> timedCache) { + super(timedCache); } - /** - * 获取缓存的所有资源 - * - * @author fengshuonan - * @date 2020/12/9 14:22 - */ - public List getAllCaches() { - return resourceDefinitions; + @Override + public String getCommonKeyPrefix() { + return ScannerConstants.RESOURCE_CACHE_KEY; } } diff --git a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/cache/RedisResourceCache.java b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/cache/RedisResourceCache.java new file mode 100644 index 000000000..c6228485a --- /dev/null +++ b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/cache/RedisResourceCache.java @@ -0,0 +1,58 @@ +/* + * Copyright [2020-2030] [https://www.stylefeng.cn] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: + * + * 1.请不要删除和修改根目录下的LICENSE文件。 + * 2.请不要删除和修改Guns源码头部的版权声明。 + * 3.请保留源码和相关描述文件的项目出处,作者声明等。 + * 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns + * 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns + * 6.若您的项目无法满足以上几点,可申请商业授权 + */ +package cn.stylefeng.roses.kernel.system.modular.resource.cache; + +import cn.stylefeng.roses.kernel.cache.redis.AbstractRedisCacheOperator; +import cn.stylefeng.roses.kernel.scanner.api.constants.ScannerConstants; +import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ResourceDefinition; +import org.springframework.data.redis.core.RedisTemplate; + +import java.util.Map; + + +/** + * 基于redis的资源缓存 + * + * @author fengshuonan + * @date 2021/5/17 16:05 + */ +public class RedisResourceCache extends AbstractRedisCacheOperator> { + + /** + * RedisTemplate的key是appCode,value的key是资源url,value是ResourceDefinition + * + * @author fengshuonan + * @date 2021/5/17 16:06 + */ + public RedisResourceCache(RedisTemplate> redisTemplate) { + super(redisTemplate); + } + + @Override + public String getCommonKeyPrefix() { + return ScannerConstants.RESOURCE_CACHE_KEY; + } + +} diff --git a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/factory/ResourceFactory.java b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/factory/ResourceFactory.java index dcfb84556..7ae2b2bf1 100644 --- a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/factory/ResourceFactory.java +++ b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/factory/ResourceFactory.java @@ -36,6 +36,8 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.parser.Feature; import com.alibaba.fastjson.serializer.SerializerFeature; +import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Set; @@ -191,4 +193,26 @@ public class ResourceFactory { return fieldMetadataSet; } + /** + * 将资源的集合整理成一个map,key是url,value是ResourceDefinition + * + * @author fengshuonan + * @date 2021/5/17 16:21 + */ + public static Map orderedResourceDefinition(List sysResourceList) { + + HashMap result = new HashMap<>(); + + if (ObjectUtil.isEmpty(sysResourceList)) { + return result; + } + + for (ResourceDefinition sysResource : sysResourceList) { + String url = sysResource.getUrl(); + result.put(url,sysResource); + } + + return result; + } + } diff --git a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/service/impl/SysResourceServiceImpl.java b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/service/impl/SysResourceServiceImpl.java index 6a10bcc21..5818fe481 100644 --- a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/service/impl/SysResourceServiceImpl.java +++ b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/service/impl/SysResourceServiceImpl.java @@ -28,6 +28,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.stylefeng.roses.kernel.auth.api.LoginUserApi; import cn.stylefeng.roses.kernel.auth.api.context.LoginContext; import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleRoleInfo; +import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi; import cn.stylefeng.roses.kernel.db.api.factory.PageFactory; import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; @@ -44,7 +45,6 @@ import cn.stylefeng.roses.kernel.system.api.RoleServiceApi; import cn.stylefeng.roses.kernel.system.api.pojo.resource.LayuiApiResourceTreeNode; import cn.stylefeng.roses.kernel.system.api.pojo.resource.ResourceRequest; import cn.stylefeng.roses.kernel.system.api.pojo.role.dto.SysRoleResourceDTO; -import cn.stylefeng.roses.kernel.system.modular.resource.cache.ResourceCache; import cn.stylefeng.roses.kernel.system.modular.resource.entity.SysResource; import cn.stylefeng.roses.kernel.system.modular.resource.factory.ResourceFactory; import cn.stylefeng.roses.kernel.system.modular.resource.mapper.SysResourceMapper; @@ -76,12 +76,12 @@ public class SysResourceServiceImpl extends ServiceImpl> resourceCache; + @Override public PageResult findPage(ResourceRequest resourceRequest) { LambdaQueryWrapper wrapper = createWrapper(resourceRequest); @@ -252,9 +252,11 @@ public class SysResourceServiceImpl extends ServiceImpl allResources = new ArrayList<>(); + ArrayList resourceDefinitionArrayList = new ArrayList<>(); for (Map.Entry> appModularResources : resourceDefinitions.entrySet()) { Map value = appModularResources.getValue(); for (Map.Entry modularResources : value.entrySet()) { + resourceDefinitionArrayList.add(modularResources.getValue()); SysResource resource = ResourceFactory.createResource(modularResources.getValue()); allResources.add(resource); } @@ -264,7 +266,8 @@ public class SysResourceServiceImpl extends ServiceImpl resourceDefinitionMap = ResourceFactory.orderedResourceDefinition(resourceDefinitionArrayList); + resourceCache.put(projectCode, resourceDefinitionMap); } @Override diff --git a/kernel-s-system/system-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/system/starter/GunsResourceCacheAutoConfiguration.java b/kernel-s-system/system-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/system/starter/GunsResourceCacheAutoConfiguration.java new file mode 100644 index 000000000..0d2a79e97 --- /dev/null +++ b/kernel-s-system/system-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/system/starter/GunsResourceCacheAutoConfiguration.java @@ -0,0 +1,61 @@ +/* + * Copyright [2020-2030] [https://www.stylefeng.cn] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: + * + * 1.请不要删除和修改根目录下的LICENSE文件。 + * 2.请不要删除和修改Guns源码头部的版权声明。 + * 3.请保留源码和相关描述文件的项目出处,作者声明等。 + * 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns + * 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns + * 6.若您的项目无法满足以上几点,可申请商业授权 + */ +package cn.stylefeng.roses.kernel.system.starter; + +import cn.hutool.cache.CacheUtil; +import cn.hutool.cache.impl.TimedCache; +import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi; +import cn.stylefeng.roses.kernel.cache.api.constants.CacheConstants; +import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ResourceDefinition; +import cn.stylefeng.roses.kernel.system.modular.resource.cache.MemoryResourceCache; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.Map; + +/** + * 资源缓存自动配置 + * + * @author fengshuonan + * @date 2021/5/17 16:44 + */ +@Configuration +public class GunsResourceCacheAutoConfiguration { + + /** + * 资源缓存 + * + * @author fengshuonan + * @date 2021/5/17 16:44 + */ + @Bean + @ConditionalOnMissingBean(name = "resourceCache") + public CacheOperatorApi> resourceCache() { + TimedCache> timedCache = CacheUtil.newTimedCache(CacheConstants.NONE_EXPIRED_TIME); + return new MemoryResourceCache(timedCache); + } + +} diff --git a/kernel-s-system/system-spring-boot-starter/src/main/resources/META-INF/spring.factories b/kernel-s-system/system-spring-boot-starter/src/main/resources/META-INF/spring.factories index c00e2a177..8c4e02ba8 100644 --- a/kernel-s-system/system-spring-boot-starter/src/main/resources/META-INF/spring.factories +++ b/kernel-s-system/system-spring-boot-starter/src/main/resources/META-INF/spring.factories @@ -1,2 +1,3 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - cn.stylefeng.roses.kernel.system.starter.GunsUserCacheAutoConfiguration + cn.stylefeng.roses.kernel.system.starter.GunsUserCacheAutoConfiguration,\ + cn.stylefeng.roses.kernel.system.starter.GunsResourceCacheAutoConfiguration