Как использовать ключ для аннотации @cacheable для метода, у которого нет параметра метода

У меня есть методы кэширования и метод удаления кеша. Я хочу использовать атрибут ключа кеша для доступа к кешу. Как заставить или заблокировать кого-то, вызывающего этот метод, для использования того же ключа.

Я пробовал что-то вроде этого, но это казалось неправильным. Параметр метода (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 ");  }

person Praneeth    schedule 30.07.2015    source источник
comment
Если у метода нет параметра, то зачем вам больше одного фиксированного ключа?   -  person chrylis -cautiouslyoptimistic-    schedule 30.07.2015
comment
один и тот же кеш используется разными кешируемыми методами, поэтому я хочу однозначно идентифицировать каждый кешируемый метод с помощью ключа.   -  person Praneeth    schedule 30.07.2015
comment
У аннотации @cacheEvict есть некоторые проблемы, она не работает должным образом. Мне пришлось создать экземпляр для моего кеша и выселить его вместо использования аннотаций.   -  person Praneeth    schedule 16.11.2015


Ответы (2)


Если у вашего метода нет параметра, просто укажите то же имя метода, что и ключ, и используйте его для исключения:

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

если у вашего метода нет параметра, вы можете использовать аннотацию без значения ключа, если вам нужна дополнительная информация по этой теме, обратитесь к http://docs.spring.io/spring/docs/current/spring-framework-reference/html/cache.html#cache-annotations-cacheable-default-key в документации spring..

person Cristian J. Brito    schedule 30.07.2015
comment
Кристиан, в моем приложении определен только один кеш, поэтому для доступа именно к данным моего кеша для определенного метода мне нужно использовать ключ, чтобы убедиться, что я удаляю те же данные кеша. - person Praneeth; 31.07.2015