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

@Cacheable不工作

越涵衍
2023-03-14

我使用@cacheable缓存spring 3.2中服务层的方法的结果。服务类内部使用以下方法代码:

@Cacheable("questions")
public List<ABClassObject> getSecutityQuestionsList(){
 List<ABClassObject> list = new ArrayList<ABClassObject>();
  ----------------
 list = ----[DAO call]

return list;

}

xml配置

    <cache:annotation-driven />

  <!-- Generic cache manager based on the JDK ConcurrentMap -->
      <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
        <property name="caches">
          <set>
            <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="questions" />
          </set>
        </property>
      </bean>

由于使用JDK1.6,无法使用EhCache。通过使用上面的代码模式,我无法缓存列表结果。当我调用上面的方法时,总是调用DAO。告诉我代码有什么问题。

提前道谢。

共有1个答案

刘瑞
2023-03-14

有些事情你应该检查一下:

  1. getSecutityQuestionsList方法的类是一个spring bean,也就是说,您无论如何都不使用新运算符。
  2. 方法getSecutityQuestionsList从另一个bean调用
  3. 在xml配置中放置上下文:component-scan base-package=“xxxxx”
  4. 在方法中放置一个断点。在堆栈跟踪中,您应该看到一些spring代理的东西。当您调用服务的此方法时,您实际上应该调用一个spring代理。
 类似资料:
  • 我有一个服务与下一个方法: 我从控制器中调用getTestWithId100方法,但它只获得新值。 部分ehcache.xml: 为什么它不工作?我尝试了不同的键,但没有成功。

  • 我正在使用spring,我想在启动我的应用程序之前缓存一些数据。 我在其他帖子中找到了一些使用@PostConstruct来调用我的@Service方法的解决方案(这些方法被注释为@Cacheable),例如。如何在spring启动时加载@Cache?我这样做了,但当应用程序启动后,我调用RESTendpoint,它再次调用这个服务方法,它会在另一次发送数据库请求(所以它还没有缓存)。当我第二次向

  • Cacheable-flash 能够和页面缓存一起工作获取 Rails 闪存对象。这个插件通过在cookie 中使用 javascript 来使用高等级页面缓存,而不是在 Rails 视图模版中使用高等级页面缓存。同时,Flash 内容能够转换成 JSON 包;通过控制器中的 after_filter 指令或者是你应用程序中 Rack 中间层发出信号,Flash内容也能在cookie中被取代。 C

  • 你知道这个场景的Spring Boot特定解决方案吗? 我按照步骤来实现Spting的,但它对我不起作用,尽管我将代码简化为最简单的示例: 对的每个请求都会打印字符串,而不仅仅是第一个字符串。 我用

  • 我有一个用并尝试使用注释。该方法还用注释。将忽略注释。是否可以在Mapstruct方法上使用?

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