【问题标题】:Is there any way to enable caching in spring for only one method?有什么方法可以只为一种方法在春季启用缓存?
【发布时间】:2019-07-09 06:59:45
【问题描述】:

我有一个 spring 项目,我在其中实现了方法级别的缓存。现在我需要停止整个项目的缓存。我通过标志将其停止以设置为 false。

现在我只想为一种方法启用缓存。有没有办法只为一种方法启用缓存?

@Cacheable(value = CacheHelper.APPLICATION_CACHE_NAME, key = "T(ca.sunlife.grs.core.cache.CacheHelper).generateApplicationCacheKey(T(ca.sunlife.grs.core.cache.CacheKey).CACHE_GET_MEMBER,#request.getClientId() + #request.getPlanId() + #request.getMemberNumber() +#request.getMemberIndicator())", unless = "#result== null")
public GetMemberMqResponse getMemberWithCache(GetMemberRequest request) throws Exception {
    GetMemberMqRequest mqRequest = getMemberDomainToMqMapper.toMqRequest(request);
    GrsLogger.info(this, "MQRequest is:" + mqRequest.getRequestString());
    return getMemberMqResponseParser.parseMqResponse(grsMqTransactionOrMockRunner.run(mqRequest));
}

【问题讨论】:

    标签: spring spring-cache


    【解决方案1】:

    您可以使用 NoOpCacheManager 并使用 Spring Profiles 驱动启用的 CacheManager。

    公共类 NoOpCacheManager 扩展 Object 实现 CacheManager

    适用于禁用缓存的基本无操作 CacheManager 实现,通常用于在没有实际后备存储的情况下支持缓存声明。 只会将任何项目接受到缓存中,而不是实际存储它们。

    @Bean
    public CacheManager cacheManager() {
        return new CaffeineCacheManager(); //Example implementation
    }
    
    @Bean
    @Profile("noCaching")
    @Primary
    public CacheManager noOpCacheManager() {
        return new NoOpCacheManager();
    }
    

    【讨论】:

      【解决方案2】:

      你可以只把@Cacheable放在你想缓存的方法上,然后把它从你不想缓存的方法中删除。

      【讨论】:

      • 有没有其他方法可以阻止它,比如使用任何注释我们都可以阻止它。
      • 我不确定,但我认为没有其他办法,如果您在项目或类级别启用缓存,则必须在方法级别禁用它。
      • 这个答案没有解决如何为整个项目禁用缓存的问题。
      • 我很抱歉@LucasP,但问题是如何只为一种方法启用缓存,您可以阅读Now I have a requirement to enable the caching only for one method. Is there any way to enable caching for only one method
      猜你喜欢
      • 2017-08-23
      • 2013-04-20
      • 2019-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      • 2011-02-13
      相关资源
      最近更新 更多