使用Spring Cache缓存Java 8可选

使用Spring Cache缓存Java 8可选,第1张

概述我有一个方法:@Cacheable(key = '#jobId') public Optional<JobInfo> getJobById(String jobId) { log.info('Querying for job ' + jobId); counterService.increment('queryJobById');

我有一个方法:

@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):

@BeanRedisCacheManager redisCacheManager (Redistemplate

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

以上是内存溢出为你收集整理的使用Spring Cache缓存Java 8可选全部内容,希望文章能够帮你解决使用Spring Cache缓存Java 8可选所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1263176.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)