Spring Boot-缓存不起作用,如何正确设置缓存?

时间:2019-02-07 02:54:59

标签: java spring spring-boot

我的应用程序在Spring Boot 1.5.1上

我查找了所有与在Spring Boot中无法使用缓存有关的常见问题(从同一类中调用可缓存的方法,等等),但我似乎仍然无法查明为什么我的方法没有缓存。我只是想使用Spring内置的简单缓存(即并发哈希图)。

设置:我在pom.xml中添加了此

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

我的配置类如下:

@SpringBootApplication
@Configuration
@EnableCaching
@EnableScheduling
public class Application {
    public static void main(String[] args) {
       SpringApplication.run(Application.class, args);
    }

}

我有一个控制器类,该类具有以下方法来获取版本列表。

 @RequestMapping(value = "/getVersionList", method = RequestMethod.GET)
 public JSONObject getVersionList() {
    JSONObject retJSON = new JSONObject();
    List<String> versions = fetchVersionService.getVersionList();
    retJSON.put("versions", versions);
    return retJSON;
}

还有FetchVersionService类,在这里我有可缓存的方法来缓存此版本列表

@Cacheable("versions")
public List<String> getVersionList() {
    System.out.println("If there is something in the cache, it should not hit here.");
    return randomService.getVersions(); //another service class that gets versions from a remote location, which takes a long time
}

每当我对该函数进行多个GET调用时,即使我只希望它执行一次该函数,它也总是进入函数内部。由于某种原因,它没有缓存结果。 有什么想法我的设置出错了吗?非常感谢。

2 个答案:

答案 0 :(得分:1)

在这个问题下的评论中,@irfanhasan 提到他们导入了错误的包,@xetra11 回复询问哪个包是错误的,没有回复。我不是@irfanhasan,但它可能是以下混淆:“您也可以透明地使用标准的 JSR-107 (JCache) 注释(例如 @CacheResult)。但是,我们强烈建议您不要混合和匹配 Spring Cache和 JCache 注释。”

答案 1 :(得分:0)

在这个问题下的评论中@irfanhasan 提到他们导入了错误的包,但没有确定的回应。 我遇到了同样的问题。我尝试使用 @Cachable 注释,但没有用。我发现它被导入为:

import springfox.documentation.annotations.Cacheable

代替:

import org.springframework.cache.annotation.Cacheable;

仔细查看您的 IDE 导入。