我正在使用ehcache-spring-annotations-1.2.0.jar 。 这是我的 cache.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:oxm="http://www.springframework.org/schema/oxm"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd">
<ehcache:annotation-driven />
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"/>
</beans>
这是我的 ehcache.xml
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
<cache name="messageCache" eternal="false"
maxElementsInMemory="5" overflowToDisk="false" diskPersistent="false"
timeToIdleSeconds="1000" timeToLiveSeconds="3000"
memoryStoreEvictionPolicy="LRU" />
这是我的主要代码
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.googlecode.ehcache.annotations.Cacheable;
public class EcacheSpringtest {
private static ApplicationContext cachecontext = new ClassPathXmlApplicationContext("cache.xml");
@Cacheable(cacheName = "messageCache")
String getName(String name) {
System.out.println(name+ " "+"has not been found in the cache so called getName()");
return "testObject";
}
public static void main(String[] args) {
long starttime;
long endtime;
long calldifferencesecs;
EcacheSpringtest test = new EcacheSpringtest();
test.getName("test");
try {
starttime = System.currentTimeMillis();
Thread.sleep(150);
endtime = System.currentTimeMillis();
calldifferencesecs = starttime - endtime ;
System.out.println("preparing to call getName with test as paramter after" +" "+ (~calldifferencesecs)+1 +"milliseconds");
} catch (InterruptedException e) {
}
test.getName("test"); // In this case testObject should be returned from cache but it is again calling getName().The method getName() is again called when same "test" String object is passed to method after 1491 milliseconds.
}
}
我参考了
http://ehcache.org/documentation/recipes/spring-annotations
https://code.google.com/p/ehcache-spring-annotations/wiki/UsingCacheable
EditFirst实施 kabochkov 下面给出的解决方案我已经对其进行了测试。但我也无法缓存。
我不知道我在哪里做错了。请帮忙吗?