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

Spring的@Cacheable在Spring Boot中从控制器调用时不工作[duplicate]

解晟睿
2023-03-14

你知道这个场景的Spring Boot特定解决方案吗?

我按照步骤来实现Spting的@Cacheable,但它对我不起作用,尽管我将代码简化为最简单的示例

@Controller
public class TestController {

    @RequestMapping("/test")
    public String testView(){
        expensiveMethod();
        return "test";
    }


    @Cacheable("ones")
    public void expensiveMethod(){
       System.out.println("Cache is not being used");
    }

}

localhost:8080/test的每个请求都会打印字符串,而不仅仅是第一个字符串。

我用@EnableCaching

共有1个答案

步德宇
2023-03-14

正如安德鲁所说,正确的问题应该是“当在同一个班级里被召集时”。

但是,由于建议帖子的答案已经过时,而且有更好的方法对更新版本的Spring很有用,我想分享一下我认为最好的方法:

  • 自动连接控制器并使用它来调用方法,而不是使用类上下文this

更新后的代码如下所示:

@Controller
public class TestController {


    @Autowired TestController self;

    @RequestMapping("/test")
    public String testView(){
        self.expensiveMethod();
        return "test";
    }


    @Cacheable("ones")
    public void expensiveMethod(){
       System.out.println("Cache is not being used");
    }

}
 类似资料:
  • 嗨,我用spring初始化器创建了一个简单的Spring Boot应用程序。我在主应用程序类的同一文件夹中添加了一个控制器。 这是给我以下错误的网址http://localhost:8080/welcome 此应用程序没有针对/错误的显式映射,因此您将其视为回退。 Sat Dec 19 12:51:44 IST 2020出现意外错误(类型=未找到,状态=404)。 如果我使用@restContro

  • 从同一bean的另一个方法调用缓存的方法时,Spring缓存不工作。 这里有一个例子来清楚地解释我的问题。 配置: 缓存服务: 结果: 方法调用在第二次调用中使用缓存。但是,当在AService类中调用方法时(在中),Cache未被使用。 这就是SpringCache的工作原理还是我遗漏了什么?

  • 我有看起来像这样的RestController: 我想知道如何将模拟对象传递给其他Controller,后者可以处理数据并将其保存到其他存储库。例如,它可以如下所示: 但我知道这种做法是不允许的。有什么办法可以做到这一点?

  • 我想在ArrayList中添加一个名称,但是当我调用put方法时,console.log显示了一个get方法。 当我调用url时 但它应该是put方法,而不是get方法,这有什么错?

  • 我使用@cacheable缓存spring 3.2中服务层的方法的结果。服务类内部使用以下方法代码: xml配置 由于使用JDK1.6,无法使用EhCache。通过使用上面的代码模式,我无法缓存列表结果。当我调用上面的方法时,总是调用DAO。告诉我代码有什么问题。 提前道谢。