From b414ca44c0cb08b0227ad7dedd8b905379adfb33 Mon Sep 17 00:00:00 2001 From: godotg Date: Sat, 22 Oct 2022 22:37:05 +0800 Subject: [PATCH] =?UTF-8?q?feat[storage]:=20=E6=9C=AA=E8=A2=AB=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E7=9A=84Storage=E6=98=AF=E5=90=A6=E5=9B=9E=E6=94=B6?= =?UTF-8?q?=EF=BC=8Crecycle=E5=B1=9E=E6=80=A7=E9=BB=98=E8=AE=A4=E5=BC=80?= =?UTF-8?q?=E5=90=AF=E8=8A=82=E7=9C=81=E8=B5=84=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zfoo/storage/manager/StorageManager.java | 12 +++++++----- .../com/zfoo/storage/model/config/StorageConfig.java | 11 +++++++++++ .../zfoo/storage/schema/StorageDefinitionParser.java | 1 + storage/src/main/resources/storage-1.0.xsd | 1 + 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/storage/src/main/java/com/zfoo/storage/manager/StorageManager.java b/storage/src/main/java/com/zfoo/storage/manager/StorageManager.java index efa9ab01..39382ab7 100644 --- a/storage/src/main/java/com/zfoo/storage/manager/StorageManager.java +++ b/storage/src/main/java/com/zfoo/storage/manager/StorageManager.java @@ -162,10 +162,12 @@ public class StorageManager implements IStorageManager { @Override public void initAfter() { - allStorageUsableMap.entrySet().stream() - .filter(it -> !it.getValue()) - .map(it -> it.getKey()) - .forEach(it -> storageMap.remove(it)); + if (storageConfig.isRecycle()) { + allStorageUsableMap.entrySet().stream() + .filter(it -> !it.getValue()) + .map(it -> it.getKey()) + .forEach(it -> storageMap.remove(it)); + } } @Override @@ -175,7 +177,7 @@ public class StorageManager implements IStorageManager { throw new RunException("没有定义[{}]的Storage,无法获取", clazz.getCanonicalName()); } if (!usable) { - throw new RunException("Storage没有使用[{}],为了节省内存提前释放了它;只有使用ResInjection注解的Storage才能被动态获取", clazz.getCanonicalName()); + throw new RunException("Storage没有使用[{}],为了节省内存提前释放了它;只有使用ResInjection注解的Storage才能被动态获取或者关闭配置recycle属性", clazz.getCanonicalName()); } return storageMap.get(clazz); } diff --git a/storage/src/main/java/com/zfoo/storage/model/config/StorageConfig.java b/storage/src/main/java/com/zfoo/storage/model/config/StorageConfig.java index 94e13141..3a361b2e 100644 --- a/storage/src/main/java/com/zfoo/storage/model/config/StorageConfig.java +++ b/storage/src/main/java/com/zfoo/storage/model/config/StorageConfig.java @@ -28,6 +28,9 @@ public class StorageConfig { // 类的属性是否可写,如果为false则类的属性必须为private并且不能有set方法 private boolean writeable; + // 未被使用的Storage是否回收,默认开启节省资源 + private boolean recycle; + public String getId() { return id; } @@ -59,4 +62,12 @@ public class StorageConfig { public void setWriteable(boolean writeable) { this.writeable = writeable; } + + public boolean isRecycle() { + return recycle; + } + + public void setRecycle(boolean recycle) { + this.recycle = recycle; + } } diff --git a/storage/src/main/java/com/zfoo/storage/schema/StorageDefinitionParser.java b/storage/src/main/java/com/zfoo/storage/schema/StorageDefinitionParser.java index 3767f342..18584be5 100644 --- a/storage/src/main/java/com/zfoo/storage/schema/StorageDefinitionParser.java +++ b/storage/src/main/java/com/zfoo/storage/schema/StorageDefinitionParser.java @@ -69,6 +69,7 @@ public class StorageDefinitionParser implements BeanDefinitionParser { resolvePlaceholder("id", "id", builder, element, parserContext); resolvePlaceholder("package", "scanPackage", builder, scanElement, parserContext); resolvePlaceholder("writeable", "writeable", builder, scanElement, parserContext); + resolvePlaceholder("recycle", "recycle", builder, scanElement, parserContext); resolvePlaceholder("location", "resourceLocation", builder, resourceElement, parserContext); parserContext.getRegistry().registerBeanDefinition(clazz.getCanonicalName(), builder.getBeanDefinition()); diff --git a/storage/src/main/resources/storage-1.0.xsd b/storage/src/main/resources/storage-1.0.xsd index 81690524..52205d5e 100644 --- a/storage/src/main/resources/storage-1.0.xsd +++ b/storage/src/main/resources/storage-1.0.xsd @@ -39,6 +39,7 @@ +