Я использую 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, я протестировал его. Но также я не могу кэшировать.
Я не мог понять, где я сделал ошибку. Любая помощь, пожалуйста?