【问题标题】:How to use key for @cacheable annotation on a method which doesn't have a method parameter如何在没有方法参数的方法上使用 @cacheable 注释的键
【发布时间】:2015-07-30 19:08:53
【问题描述】:

我有一个缓存方法和一个缓存驱逐方法我想使用缓存键属性来访问缓存,如何强制或锁定调用此方法的人使用相同的键。

我尝试过这样的事情,但是,它似乎不正确。方法参数(cachekey)可以作为调用者所需的任何值传递。

@Cacheable(value = "cacheNamex" , key ="#cachekey") 
    public   List  someCachableMethod(String cacheKey ) {
        List someList = someJdbctemplet.query(SOME_QUERY, someRowMapperObj);
        System.out.println(" data Returned from method");
        return someList;
    }
@CacheEvict((value = "cacheNamex" , key ="#cachekey") 
    public void someCacheEvictMethod(String cacheKey ){
           System.out.println("cache eviction called");
           System.out.println(" Expecting cache, cachex is cleared ");  }

【问题讨论】:

  • 如果方法没有参数,那为什么需要多个固定键?
  • 不同的可缓存方法使用相同的缓存,所以我想用一个键唯一标识每个可缓存的方法。
  • @cacheEvict 注释有一些问题,它没有按预期工作。我必须为我的缓存创建一个实例并逐出而不是使用注释。

标签: java spring caching ehcache spring-cache


【解决方案1】:

如果您的方法没有任何参数,只需将相同的方法名称作为键并将其用于 Evict:

@Cacheable(value = "cacheNamex" , key ="'someCachableMethod'")
 public   List  someCachableMethod() {
 }
 @CacheEvict((value = "cacheNamex" , key ="'someCachableMethod'") 
 public void someCacheEvictMethod(){
}

【讨论】:

    【解决方案2】:

    如果你的方法没有参数,你可以使用没有键值的注解,如果你想了解更多关于这个主题的信息,请参考spring文档中的http://docs.spring.io/spring/docs/current/spring-framework-reference/html/cache.html#cache-annotations-cacheable-default-key..

    【讨论】:

    • 克里斯蒂安,我在我的应用程序中只定义了一个缓存,因此要针对特定​​方法精确访问我的缓存数据,我需要使用一个键来确保我正在驱逐相同的缓存数据
    猜你喜欢
    • 1970-01-01
    • 2013-06-26
    • 2012-12-13
    • 2018-05-06
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    相关资源
    最近更新 更多