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 @@ +