我很清楚关于这个话题有多个问题,但我就是弄不懂它的意思。问题似乎是@cacheput
没有将新值添加到@cacheable列表中。
调试完问题后,我发现问题似乎出在钥匙上。
下面是代码片段
@CacheConfig(cacheNames = "documents")
interface DocumentRepository {
@CachePut(key = "#a0.id")
Document save(Document document);
@Cacheable()
List<Document> findAll();
}
所以当我调用save方法时,用于缓存的关键字是incrementing integer,或者1,2,3...但是当我尝试获取所有文档时,缓存使用SimpleKey[]作为键。如果我尝试为@Cacheable使用相同的键,我会得到SpelEvaluationException,属性'id'在null上找不到。
所以我最后剩下的是功能缓存(数据保存在缓存中),但不知何故我无法检索它。底层缓存实现是ehcache。
我真不明白你在这里期待什么。
看起来您希望findall
方法返回名为documents
的缓存的完整内容。我不认为文档中有任何东西可以让您得出这个特性存在的结论(它并不存在)。它也很脆弱。如果我们实现了这一点,findall
将根据缓存的状态返回不同的结果。例如,如果有人将此缓存配置为最大大小为100。或者缓存在启动时没有预热。
您不能期望缓存抽象(甚至缓存库)维护“对象列表”的同步视图。findall
所做的是返回与没有参数的键(默认情况下new simplekey
)相对应的条目。
我们有一个关于MySQL中返回错误整数值的函数的问题。我们已经检查了“booked_passeters”是否包含正确的值0,并且当移除该变量时,它可以正常工作,也就是说只返回整数40。但是,当我们试图从它中减去“booked_passeters”(最终仍应返回40)时,它就不起作用了。 包括下面的代码。 提前道谢!:-)
我有一个测试类包含测试方法和两个服务类和。我正在为类中的方法编写JUnit测试,该类包括对类方法的调用。在我写的测试方法中 因此,当调用时,它应该返回大小为1,但不返回此列表,返回的是一个大小为0的列表。
问题内容: 我有一个存储过程,它检查用户是否已经存在,无论用于电子邮件的输入是什么,它随数据库的第一行一起返回。如果我手动运行select语句,我将得到正确的结果。有什么建议吗? 问题答案: 您的问题无疑在这里: 白衣 您的参数名称与列名称相同。这 可 实际工作,但规则使它这样做可能是怪异。(我认为,如果您更改引号,它可能会起作用)。 但是实际上,您应该做的是将参数重命名为其他名称:
我正在学习Spring WebFlux,在编写示例应用程序的过程中,我发现了一个与Spring Cache结合的反应类型(Mono/Flux)相关的问题。 考虑以下代码段(Kotlin格式): 下面的代码用于SimpleCacheResolver,但默认情况下,由于Mono不可序列化,在Redis中失败。为了使它们工作,例如,需要使用Kryo串行化器。