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

缓存逐出不工作

姚自强
2023-03-14

在我的项目中,我使用了一个@Cacheable注释ia一个服务方法,它返回涉及书籍和一些标记的计算结果,我想在一个@Controller类方法中退出缓存,该方法将一本新书添加到数据库中,因为这本新书将是新计算所必需的。

服务类:@Cacheable("metas")public...计算(){返回计算;}

控制器类:@RequestMapping@CacheEvict(value=“metas”,allEntries=true)public void addNewBook()

为什么它不起作用?


共有1个答案

皇甫德庸
2023-03-14

很可能在根应用程序上下文中有@EnableCaching。这不会对子DispatcherServlet应用程序上下文产生影响。不会处理控制器上的@CacheEvict注释。Spring使用BeanPostProcessor通过使用代理在运行时编织缓存行为。BeanPostProcessor的作用域取决于应用程序上下文。

将addNewBook方法定义和缓存元数据移动到服务类中,并从控制器调用该方法

 类似资料:
  • 我有一个关于内存系统遵循的策略的基本问题。 考虑一个具有私有L1和L2缓存的核心。在L2缓存之后,我们有一个相干流量运行的总线。现在,如果从L2高速缓存中逐出地址(X)的高速缓存行,是否有必要从L1高速缓存中逐出该地址?? 逐出的原因可能是它有助于保持一致性协议的不变[如果l2中的一行显示无效,则此核心不包含此地址]。

  • 嗨,我在执行方法时遇到清理缓存的问题。这是我的配置和缓存方法: 我要缓存的这个方法: 在执行此方法时,我希望按类型清理缓存: 新闻消息对象看起来像: 缓存工作正常,第一次查询DB时,第二次从缓存中提取数据。问题是当我更新数据时,@CacheEvict不会清理缓存。我试图使用以下注释清理所有缓存:@cacheexit(cacheNames={CacheConfiguration.RSS\u NEWS

  • 我正试图驱逐我的持久性实体管理器中的二级缓存。看起来我可以使用javax.persistence.Cache接口中定义的以下函数: 为了得到Cache对象,我可以使用javax.persistence.EntityManagerFactory接口中定义的以下函数: 我连接我的EntityManagerFactory是这样的: 使用以下applicationContext配置文件: 当我对对象调用g

  • 我使用Spring缓存抽象,定义了多个缓存。有时,当数据更改时,我想逐出多个缓存。是否可以使用Spring的CacheExit注释逐出多个缓存?

  • 我想为Spring Cache执行以下操作。 > 检查传递的字符串是否存在于缓存中。如果存在,则返回true,如果不存在,则添加到缓存;checkInCache(字符串str) 从缓存逐出字符串(String str) 尝试如下 @组件公共类FlightCache{ 并在配置类上添加了@EnableCaching注释。 错误:

  • 我计划使用infinispan作为我的Hibernate应用程序二级缓存。My all entities具有生命周期属性[新建- 简单地说,当实体生命周期属性状态到达已完成状态时,我想从缓存中驱逐实体。据我所知,Infinispan不支持自定义驱逐策略。处理我的情况的最佳方式是什么?