使用Spring Cache缓存Java 8可选

前端之家收集整理的这篇文章主要介绍了使用Spring Cache缓存Java 8可选前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个方法

@Cacheable(key = "#jobId")
public Optional

当我尝试检索缓存的项目时,我收到以下异常:

2016-01-18 00:01:10 ERROR [trace=,span=] http-nio-8021-exec-2 [dispatcherServlet]:182 – Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing Failed; nested exception is org.springframework.data.redis.serializer.SerializationException: Cannot serialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to serialize object using DefaultSerializer; nested exception is java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [java.util.Optional]] with root cause
java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [java.util.Optional]

最佳答案
Spring支持缓存可选.问题是您的Redis序列化程序(可能是JdkSerializationRedisSerializer).它使用基于Java的序列化,要求类可以序列化.您可以通过将RedisCacheManager配置为使用没有此限制的其他序列化程序来解决此问题.例如,您可以使用Kryo(com.esotericsoftware:kryo:3.0.3):

@Bean
RedisCacheManager redisCacheManager (RedisTemplate

请注意,这只是一个例子,我没有测试这个imeplementation.但我在生产中使用Kryo序列化程序以相同的方式使用Spring进行redis缓存.

猜你在找的Spring相关文章