从Spring Boot中具有@transactional批注的方法调用@Cacheable时不创建缓存键

时间:2019-02-07 13:29:23

标签: java spring caching spring-transactions

遇到一个奇怪的问题,我用@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}

内部地理服务助手直接使用forceReload = false调用api管理器。

我想念一些愚蠢的东西吗?

1 个答案:

答案 0 :(得分:1)

嘿哥们只要等待交易得到提交,您就会看到想要看到的东西。