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

Spring缓存只在某些时候起作用

赫连子石
2023-03-14
@GetMapping
@Cacheable(value = "cache", key = "{ #root.methodName }")
public Books getBooks(@RequestHeader(value = "user-agent", required = false) String userAgent) throws Exception {
     if(valid) {
          return this.doGetBooks();
     }
     throw new Exception();
}


public Books doGetBooks() throws Exception{
    ...

这将永远不会缓存私有方法响应

@GetMapping
public Books getBooks(@RequestHeader(value = "user-agent", required = false) String userAgent) throws Exception {
     if(valid) {
          return this.getBooks();
     }
     throw new Exception();
}


@Cacheable(value = "cache", key = "{ #root.methodName }")
public Books doGetBooks() throws Exception{
    ...

共有1个答案

元嘉木
2023-03-14

问题:您在同一个类中调用doGetBooks(),而Spring缓存需要调用方法的AOP代理。

这是一个很好的讨论,描述了为什么Spring AOP不能拦截其他类方法调用的方法:AOP调用方法中的方法

至少有三种变通办法:

    null
 类似资料:
  • 我正在学习PHP(所以我是新手)。我正在使用XAMPP,Apache的PC(Windows 7)上工作。 我有两个文件,例如表格。html: 欢迎光临。php: 我创建了这两个文件,效果很好。周一,我遇到了一个问题,单击buttom summit查询时,它会显示代码,而不是结果。我搜索了几个论坛,发现我需要在httpd中添加以下内容。conf(xampp/apache/conf/): ******

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

  • 问题内容: 我使用PHP库生成一些图像。 有时浏览器不会加载新生成的文件。 如何仅为我动态创建的图像禁用缓存? 注意:随着时间的推移,我必须对创建的图像使用相同的名称。 问题答案: 对于这个问题,一种常见而简单的解决方案是给每个对动态图像的请求添加一个随机生成的查询字符串,这种解决方案看起来很像黑客,但移植性很强。 因此,例如- 会成为 要么 从Web服务器的角度来看,可以访问同一文件,但是从浏览

  • 我正试图在后台获取用户位置。在我的手机(htc one m7)上一切都很好,但出于某种原因,它不能在我测试的两个设备上工作:三星galaxy s3索尼Xperia Z1 顺便说一句:我把所有东西都添加到了清单中。

  • 问题内容: 我正在尝试但未能成功在具有以下 依赖项的* Spring Data 和 Hibernate environmet中缓存查询: * 我的实体服务的Spring Data Repository(ServiceRepository)是 从中调用存储库的@Cacheable方法 我的缓存配置文件(jpa-context.xml)是 它的灵感来自spring-data-jpa-examples

  • 我使用Spring Boot 1.4.1和spring-boot-starter-data-jpa 当查询我的自定义方法时,比如'find byname(String name)',它不是缓存。