diff --git a/src/main/java/com/rebuild/server/configuration/ConfigManager.java b/src/main/java/com/rebuild/server/configuration/ConfigManager.java index b2837aec1..79fba59a9 100644 --- a/src/main/java/com/rebuild/server/configuration/ConfigManager.java +++ b/src/main/java/com/rebuild/server/configuration/ConfigManager.java @@ -25,7 +25,12 @@ package com.rebuild.server.configuration; * @since 01/04/2019 */ public interface ConfigManager { - + + /** + * 已删除项标记 + */ + String DELETED_ITEM = "$$RB_DELETED$$"; + /** * 清理缓存 * diff --git a/src/main/java/com/rebuild/server/configuration/portals/ClassificationManager.java b/src/main/java/com/rebuild/server/configuration/portals/ClassificationManager.java index aed74f7ad..8b3b9737d 100644 --- a/src/main/java/com/rebuild/server/configuration/portals/ClassificationManager.java +++ b/src/main/java/com/rebuild/server/configuration/portals/ClassificationManager.java @@ -62,18 +62,19 @@ public class ClassificationManager implements ConfigManager { final String ckey = "ClassificationNAME-" + itemId; String[] cached = (String[]) Application.getCommonCache().getx(ckey); if (cached != null) { - return cached; + return cached[0].equals(DELETED_ITEM) ? null : cached; } - + Object[] o = Application.createQueryNoFilter( "select name,fullName from ClassificationData where itemId = ?") .setParameter(1, itemId) .unique(); - if (o != null) { - cached = new String[] { (String) o[0], (String) o[1] }; - Application.getCommonCache().putx(ckey, cached); - } - return cached; + if (o != null) cached = new String[] { (String) o[0], (String) o[1] }; + // 可能已删除 + if (cached == null) cached = new String[] { DELETED_ITEM, DELETED_ITEM }; + + Application.getCommonCache().putx(ckey, cached); + return cached[0].equals(DELETED_ITEM) ? null : cached; } /** diff --git a/src/main/java/com/rebuild/server/configuration/portals/PickListManager.java b/src/main/java/com/rebuild/server/configuration/portals/PickListManager.java index f0d91951a..faa495bbc 100644 --- a/src/main/java/com/rebuild/server/configuration/portals/PickListManager.java +++ b/src/main/java/com/rebuild/server/configuration/portals/PickListManager.java @@ -39,7 +39,7 @@ public class PickListManager implements ConfigManager { public static final PickListManager instance = new PickListManager(); protected PickListManager() { } - + /** * @param field * @return @@ -119,18 +119,19 @@ public class PickListManager implements ConfigManager { final String ckey = "PickListLABEL-" + itemId; String cached = Application.getCommonCache().get(ckey); if (cached != null) { - return cached; + return cached.equals(DELETED_ITEM) ? null : cached; } - + Object[] o = Application.createQueryNoFilter( "select text from PickList where itemId = ?") .setParameter(1, itemId) .unique(); - if (o != null) { - cached = (String) o[0]; - } + if (o != null) cached = (String) o[0]; + // 可能已删除 + if (cached == null) cached = DELETED_ITEM; + Application.getCommonCache().put(ckey, cached); - return cached; + return cached.equals(DELETED_ITEM) ? null : cached; } /** diff --git a/src/main/java/com/rebuild/server/helper/cache/BaseCacheTemplate.java b/src/main/java/com/rebuild/server/helper/cache/BaseCacheTemplate.java index b7b54dfc5..0d8e64880 100644 --- a/src/main/java/com/rebuild/server/helper/cache/BaseCacheTemplate.java +++ b/src/main/java/com/rebuild/server/helper/cache/BaseCacheTemplate.java @@ -79,6 +79,10 @@ public abstract class BaseCacheTemplate implements Cache @Override public void put(String key, String value, int seconds) { + if (value == null) { + LOG.warn("Can't set `" + key + "` to null"); + return; + } delegate.put(unityKey(key), value, seconds); } @@ -94,6 +98,10 @@ public abstract class BaseCacheTemplate implements Cache @Override public void putx(String key, V value, int seconds) { + if (value == null) { + LOG.warn("Can't set `" + key + "` to null"); + return; + } delegate.putx(unityKey(key), value, seconds); } diff --git a/src/main/java/com/rebuild/server/helper/cache/EhcacheDriver.java b/src/main/java/com/rebuild/server/helper/cache/EhcacheDriver.java index ae2f42c23..c97144981 100644 --- a/src/main/java/com/rebuild/server/helper/cache/EhcacheDriver.java +++ b/src/main/java/com/rebuild/server/helper/cache/EhcacheDriver.java @@ -25,6 +25,7 @@ import org.springframework.cache.Cache.ValueWrapper; import org.springframework.cache.CacheManager; import java.io.Serializable; +import java.util.Objects; /** * ehcache @@ -53,6 +54,8 @@ public class EhcacheDriver implements CacheTemplate { @Override public void put(String key, String value, int seconds) { + Objects.requireNonNull(value, "`value` not be null"); + Element el = new Element(key, value); if (seconds > -1) { el.setTimeToLive(seconds); @@ -74,6 +77,8 @@ public class EhcacheDriver implements CacheTemplate { @Override public void putx(String key, V value, int seconds) { + Objects.requireNonNull(value, "`value` not be null"); + Element el = new Element(key, value); if (seconds > -1) { el.setTimeToLive(seconds); diff --git a/src/main/java/com/rebuild/server/helper/cache/JedisCacheDriver.java b/src/main/java/com/rebuild/server/helper/cache/JedisCacheDriver.java index c488bd4cc..2c55a8975 100644 --- a/src/main/java/com/rebuild/server/helper/cache/JedisCacheDriver.java +++ b/src/main/java/com/rebuild/server/helper/cache/JedisCacheDriver.java @@ -24,6 +24,7 @@ import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import java.io.Serializable; +import java.util.Objects; /** * redis @@ -58,6 +59,8 @@ public class JedisCacheDriver implements CacheTemplate implements CacheTemplate