我通过在具有以下声明的方法上使用@Cacheable
批注来启用缓存:
@Cacheable(value = "myCache", key = "#t+ '_' + #key", condition = "#key != null")
public <T> T get(String t, VendorProperty<T> key, T defaultValue) {
return get(t, key).orElse(default_value);
}
但是,如果尝试缓存的对象不可序列化(例如:NotSerializableException
),则会抛出DateTimeFormatter
。
我想知道是否只有在对象可序列化时才可以缓存对象,以免发生此异常。
我正在使用memcache
使用simple-spring-memcache
库来缓存对象。
PS:我无法实现Serializable
接口,因为DateTimeFormatter
是预定义的类。
答案 0 :(得分:2)
您可以指定条件:
condition = "#key != null && #root.target instanceof T(java.io.Serializable)"
答案 1 :(得分:0)
以上建议无效。 #root.target是正在执行的目标对象(在本例中为服务对象)。由于服务对象不可序列化,因此该对象似乎可以工作,因此有关对象将不会被缓存,而其他任何对象也将不会被缓存。
您需要使用结果变量来利用“除非”条件:
@Cacheable(value = "myCache",
key = "#t+ '_' + #key",
condition = "#key != null"
unless="!(#result instanceof T(java.io.Serializable))")