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

当从spring boot中具有@transactional注释的方法调用时,@cacheable不创建缓存键

段劲
2023-03-14

我遇到了一个奇怪的问题,我用@transactional注释了我的控制器(只是为了测试),但让我吃惊的是,当它在内部命中带有@cacheable注释的方法时,它并没有创建任何缓存键

@Transactional
@RequestMapping(value = "/auth", method = RequestMethod.POST)
public void createAuth() {
    ApplicationContextProvider.getApplicationContext().getBean(GeographyServiceHelper.class).getAggregatedClusterData(1);
}

带有@cacheable问题的方法。

@Cacheable(value = "getAllClusterHierarchyHash", key = "\"all_cluster_hirerarchy_map\"", unless = CONDITION_NULL,
        cacheNames = "getAllClusterHierarchyHash")
@CacheEvict(value = "getAllClusterHierarchyHash", key = "\"all_cluster_hirerarchy_map\"",
        condition = "#forceReload", cacheNames = "getAllClusterHierarchyHash", beforeInvocation = true)
public Map<Integer, ClusterDetails> getAllClusterHierarchyHash(Boolean forceReload) {// do something}

在内部,geography service helper直接调用api manager,使用forceReload=false。

我是不是错过了什么傻事?

共有1个答案

龚国源
2023-03-14

嘿,伙计,只需等待事务得到提交,您将看到您想要看到的。

 类似资料:
  • 我有一个用@Cacheable注释的方法。如果在方法内部捕获了异常,我希望清除缓存。但是,缓存似乎是在清除缓存的行之后执行的方面中加载的。因此,当在方法中捕获异常时,即使清除了缓存,空字符串结果仍保留在缓存中。 我应该从哪里清除缓存?

  • 问题内容: 我在Service类中看到了一种被标记为的方法,但是它也在同一类中调用了其他未标为的方法。 这是否意味着对单独方法的调用导致应用程序打开与DB的单独连接或暂停父事务等? 不带任何注释的方法的默认行为是什么,而另一个带有注释的方法调用该方法的默认行为是什么? 问题答案: 当你调用没有事务块之内的方法时,父事务将继续使用新方法。它将使用与父方法(with )相同的连接,以及在调用的方法中导

  • spring应用程序无法启动,因为它无法在配置类中找到一个带有@Service注释的类的bean。但只有在我使用@Transactional注释特定服务类中的方法时才会出现这种情况。为什么会这样?

  • 当我调用我用注释的方法时,我知道缓存没有被使用,因为我在方法内部进行了打印,如果使用了缓存,就不应该打印它。 在日志中,我知道缓存正在初始化 我应该提到调用该方法的方法是常规Java

  • 我试图在一个方法上调用@CacheEvict和@Cacheable注释。 在调用@CacheEvict时,我想删除特定键的缓存数据,然后再次缓存方法响应的新鲜数据。但它没有缓存新鲜数据?。而且它也没有给出任何错误?。