问题
I'm trying to use google guava cache in my spring app, but result is never caching.
This are my steps:
in conf file:
@EnableCaching
@Configuration
public class myConfiguration {
@Bean(name = "CacheManager")
public CacheManager cacheManager() {
return new GuavaCacheManager("MyCache");
}
}
In class I want to use caching:
public class MyClass extends MyBaseClass {
@Cacheable(value = "MyCache")
public Integer get(String key) {
System.out.println("cache not working");
return 1;
}
}
Then when I'm calling:
MyClass m = new MyClass();
m.get("testKey");
m.get("testKey");
m.get("testKey");
It's entering function each time and not using cache: console:
cache not working
cache not working
cache not working
Does someone have an idea what am I missing or how can I debug that?
回答1:
You should not manage a spring bean by yourself. Let spring to manage it.
@EnableCaching
@Configuration
public class myConfiguration {
@Bean(name = "CacheManager")
public CacheManager cacheManager() {
return new GuavaCacheManager("MyCache");
}
@Bean
public MyClass myClass(){
return new MyClass();
}
}
After that you should use MyClass in a managed manner.
public static void main(String[] args) throws Exception {
final ApplicationContext applicationContext = new AnnotationConfigApplicationContext(myConfiguration.class);
final MyClass myclass = applicationContext.getBean("myClass");
myclass.get("testKey");
myclass.get("testKey");
myclass.get("testKey");
}
来源:https://stackoverflow.com/questions/32093019/spring-using-google-guava-cache