2015-11-09 2 views
2

У меня есть очень простой метод, который я аннотировал @Cacheable, ожидая, что он будет выполняться только один раз для каждого отправленного ему параметра, но он не будет работать как ожидалось и будет выполняться каждый раз. Чтобы упростить вещи, скажем, мой метод заключается в следующем:Как настроить Spring для поддержки аннотации @Cacheable

 @Cacheable(value = "test") 
     public int someMethod(int val){ 
     return val++; 
     } 

И я призываю его дважды следующим образом:

int result1 = someMethod(1); 
    int result2 = someMethod(1); 

Как я понял, я должен сделать некоторые настройки, так что будет работать, как и ожидалось , возможно, в xml. Что это за правильное опознание?

+0

... потому что вы называете это разными аргументами? –

+0

OOPS, конечно, с обоими временами одинаковый пар. исправлено –

+0

... потому что вы вызываете метод, как обычный вызов метода Java, без привлечения Spring? –

ответ

1

Если вы используете загрузку пружины, вы должны установить @EnableCaching аннотацию в файле конфигурации:

@SpringBootApplication 
//@EnableScheduling 
@EnableAutoConfiguration 
@EnableCaching 
public class Application { 
    @Bean 
    public CacheManager cacheManager() { 
     // configure and return an implementation of Spring's CacheManager SPI 
     SimpleCacheManager cacheManager = new SimpleCacheManager(); 
     cacheManager.setCaches(Arrays.asList(new ConcurrentMapCache("default"))); 
     return cacheManager; 
    } 
    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 

} 

, то вы должны зарегистрировать CacheManager боб. См doc

Ваш пружинный компонент с @Cacheable аннотацию, значение которого должно присутствовать в caches в вашем CacheManager боба.

@Service 
public class CacheableService { 
    @Cacheable(value="default") 
    public int sum(int i,int q){ 
     System.out.println("called"); 
     return i+q; 
    } 
} 
Смежные вопросы