当前位置: 首页 > 知识库问答 >
问题:

Spring的@CachePut注释是否适用于void返回类型?

呼延承平
2023-03-14

我正试图使用Ehcache和Spring 3.1内置的缓存注释(@Cacheable、@CacheEvict和@CachePut)在我的应用程序中实现缓存。

我创建了一个缓存,如下所示:

@Cacheable(value = "userCache", key = "#user.id")
public List<User> getAllUsers() {
...
}

我正在尝试使用@CachePut注释用新值更新此缓存,如下所示:

@CachePut(value = "userCache", key = "#user.id")
public void addUser(User user) {
...
}

但是,新的“用户”没有添加到缓存中。这是因为无效返回类型吗?

共有2个答案

姬心思
2023-03-14

这行不通,因为您使用的是相同的缓存值“userCache”,但方法getAllUsers的返回类型是List,addUser的返回类型是User。这将导致存储在缓存中的数据不一致。

(列表用户):这种类型的数据将在缓存中形成。

稍后,当您调用方法getAllUsers时,代码将是

列出用户列表=getAllUser();

但在这种情况下,将从缓存中获取数据并抛出“类强制转换异常”。

作为,(列表用户)不能转换到列表中。

有什么解决办法吗?我被这件事困住了,不知道该怎么办。在这里使用自定义注释有效吗?

云凌
2023-03-14

是的,这是因为void返回类型。@CachePut注释将方法的结果放入缓存。在您的情况下,没有结果,因此不会将任何内容放入缓存

将方法签名更改为返回用户:

public User addUser(User user) { 
   ...
}
 类似资料:
  • 环境:科特林 1.5.30, 春靴 2.5.4(Spring 5.3.9) 我试图创建一个组合注释来简化类似的模板注释代码。注释类如下: 预期用法: application.yaml: 但在应用程序启动后,TheBean 未按预期注册。 > 首先,我在github spring存储库中搜索,发现了这个:回归:自定义组合@Profile注释,组件扫描不再支持没有运行时保留。所以我试图但没有效果。 尝

  • Spring参考文档说明如下: ComponentScanPackageMarker类故意省略了@Configuration注释。我已经测试了组件扫描和自动连接功能。令我吃惊的是,一切都很顺利: 组件扫描的这种行为是故意的吗?为什么即使没有@Configuration注释也能工作?

  • 给定一个具有用于初始化的帮助器方法的类: 是否可以从\u int方法注释

  • (Spring的@CachePut注释是否适用于void返回类型?) 我遇到了同样的问题 因为这个问题已经存在很长时间了,我不知道是否有解决办法 创建缓存: 使用@CachePut更新此缓存 输出: 我搜索了几天信息,但没有找到答案 除了使用@CacheEvict(cacheNames=userCache,allEntry=true) 有没有办法用@Cacheable和@CachePut解决? 非

  • 在python 3.x中,通常使用函数的返回类型注释,例如: “void”类型的正确注释是什么? 我正在考虑三种选择:

  • 我正在开发一个示例SpringBoot应用程序。我有两个包裹。通用域名格式。A(其中有@springbootApplication注释的主类)2。通用域名格式。B(其他春豆)。 现在我的问题是:由于应用程序失败,包B中的Spring bean没有被扫描。我尝试使用a。@springbootApplication atio(scanBasePackages="com. B")b。也@组件扫描(...