Spring 3.1整合EhCache

Spring 3.1提供了对cache的支持,但到目前为止,支持的第三方cache只有Ehcache一种。在以前版本的spring中,也可以通过添加其它包实现对ehcache的注解化支持,但Spring 3.1提供了对cache的原生支持。

网上看了很多文章,虽然多个网站各种转载,还均不注明出处,但应该就是一个人写出来的大家抄而已。说抄可能不太好听,但是不注明转载的转载就是抄。废话少说,进入正题。

首先建好项目提供必要的包:

包的用处不多说,然后写好一个ehcache.xml放到classpath下:

ehcache.xml














maxElementsInMemory="500"

eternal="false"

timeToIdleSeconds="300"

timeToLiveSeconds="1200"

overflowToDisk="true"/>





配置文件中进行了基本的配置,建立了一个叫“young”的cache。

然后在非整合spring的时候,测试一下cache是否使用成功:

NormalTest.java

public class NormalTest {



public static void main(String[] args) {

CacheManager manager = CacheManager.create();// 默认配置文件创建

String[] names = manager.getCacheNames();

for (int i = 0; i < names.length; i++) {

System.out.println(names[i]);

}

//Cache cache = manager.getCache(names[0]);

Cache cache = new Cache("test", 150, true, false, 5, 2);

manager.addCache(cache);

cache.put(new Element("key1","value1"));

Element element = cache.get("key1");

System.out.println(element.getValue());

String[] names1 = manager.getCacheNames();

for (int i = 0; i < names1.length; i++) {

System.out.println(names1[i]);

}

}

}

运行一下,有输出存进去的值就OK啦。

下面开始整合Spring,建立Spring配置文件:

applicationContext.xml




xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:util="http://www.springframework.org/schema/util"

xmlns:p="http://www.springframework.org/schema/p"

xmlns:cache="http://www.springframework.org/schema/cache"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx-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/util

http://www.springframework.org/schema/util/spring-util-3.0.xsd

http://www.springframework.org/schema/cache

http://www.springframework.org/schema/cache/spring-cache.xsd">


















p:configLocation="classpath:ehcache.xml"

p:shared="false" />




p:cacheManager-ref="cacheManagerFactory"/>



建立一个有缓存使用的类:
CacheMethod.java

package young;



import org.springframework.cache.annotation.Cacheable;

import org.springframework.stereotype.Component;



@Component

public class CacheMethod {



@Cacheable("young")

public String getYoung(String str) {

System.out.println("method is running...");

return "1230-1230-1230-0123-0123";

}

}
类中只有一个方法,返回固定值,并且会被缓存。
最后用Junit4对这个类进行测试:
SpringCacheTest.java

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations = { "classpath:applicationContext.xml" })

public class SpringCacheTest {

@Resource

CacheManager manager;



@Resource

CacheMethod method;



@Test

public void testGetYoung() {

// CacheMethod method = new CacheMethod();这样得到的实例不在Spring的管理之中,也无法Cache

String s = method.getYoung("str");

System.out.println(s);

String s1 = method.getYoung("str");

System.out.println(s1);

String[] names = manager.getCacheNames();

for (int i = 0; i < names.length; i++) {// 输出所有缓存

System.out.println(names[i]);

}

Cache young = manager.getCache("young");// 得到cache

System.out.println("Cache named 'young':" + young);

assertEquals("str", young.getKeys().get(0));

assertEquals(s, young.get("str").getValue());

}

}

到此应该就测试成功啦!~



最后说下我遇到的错误,最一开始在测试中这样写的:

CacheMethod method = new CacheMethod();

然后进行调用 ,发现返回值并没有进行缓存,再次调用时仍然会打印出getYoung()中的日志。这是由于这种调用并不是在Spring的管理下进行的,所以Spring也就不能对其进行cache了。

转:http://hi.baidu.com/coolcooldool/blog/item/3b541533c72b40e21a4cffda.html

你可能感兴趣的:(MVC+ORM)