[关闭]
@aloxc 2017-12-05T06:24:28.000000Z 字数 921 阅读 424

我们一起学ignite之缓存key检查

一起学 ignite 源码分析


如题,ignite中对缓存操作的时候可选是否需要对缓存的key进行检查,这个可由环境变量IGNITE_CACHE_KEY_VALIDATION_DISABLED来控制,配置false或者不配置就表示需要对key进行验证,true就表示不需要进行验证,该字段在IgniteSystemProperties.java中定义。
如果平常编码严格的话可配置,线上环境可配置为false。

当需要验证的时候,是通过反射读取作为key的对象实现类中有无覆盖hashCode和equals方法,代码见
IgniteUtils.java中

  1. public static boolean overridesEqualsAndHashCode(Object obj) {
  2. try {
  3. Class<?> cls = obj.getClass();
  4. return !Object.class.equals(cls.getMethod("equals", Object.class).getDeclaringClass()) &&
  5. !Object.class.equals(cls.getMethod("hashCode").getDeclaringClass());
  6. }
  7. catch (NoSuchMethodException | SecurityException ignore) {
  8. return true; // Ignore.
  9. }
  10. }

调用该代码的是GridCacheUtils.java中的public static void validateCacheKey(@Nullable Object key)

  1. public static void validateCacheKey(@Nullable Object key) {
  2. if (key == null)
  3. return;
  4. if (!IgniteUtils.overridesEqualsAndHashCode(key))
  5. throw new IllegalArgumentException("Cache key must override hashCode() and equals() methods: " +
  6. key.getClass().getName());
  7. }

x

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注