Spring3.2使用Ehcache注解

项目组使用的框架是Spring3.2+hibernate4,老师让我研究一下Spring的缓存机制。在网上找了下,发现Ehcache使用的最多,个人也不太喜欢写太多配置文件,就决定采用注解的方式实现缓存。本文算是个人的一点经验总结,闲话不多说,进入正题吧。

一.配置Spring缓存

首先要做的是在Spring的主配置文件中加入缓存的配置信息,beans节点的属性如下所示:

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:cache="http://www.springframework.org/schema/cache"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans.xsd
	http://www.springframework.org/schema/cache 
	http://www.springframework.org/schema/cache/spring-cache-3.2.xsd
	http://www.springframework.org/schema/aop           
	http://www.springframework.org/schema/aop/spring-aop-2.5.xsd            
	http://www.springframework.org/schema/tx            
	http://www.springframework.org/schema/tx/spring-tx-2.5.xsd 
	">
其中,cache和tx是实现注解缓存所必须的。主配置文件中关于缓存的配置信息如下所示:

<!-- 开启注解缓存 -->
<cache:annotation-driven />
	
<!-- cacheManager工厂类,指定ehcache.xml的位置 -->
<bean id="cacheManagerFactory"
	class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
	<property name="configLocation" value="classpath:ehcache.xml"></property>
	<property name="shared" value="true"></property>
</bean>

<!-- 声明cacheManager -->
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
	<property name="cacheManager" ref="cacheManagerFactory">
	</property>
</bean>
这里要注意两个问题,一个是EhCacheManagerFactoryBean的shared属性要显示的设定为true,否则会一直报错,本人就在这个问题上纠结了很久;另一个是classpath,这个路径指向的是src的子目录,本人曾尝试把ehcache.xml放在WEB-INF下,但一直没有成功,最后只好放在src的子目录下了。

二.配置ehcache.xml文件

spring配置文件里只是配置了一些代理信息,具体的缓存还是要在ehcache.xml中配置。ehcache.xml如下所示:

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="ehcache.xsd">

    <diskStore path="java.io.tmpdir"/>

    <defaultCache
        maxElementsInMemory="100"
        eternal="true"
        overflowToDisk="true"
        diskPersistent="false"
        diskExpiryThreadIntervalSeconds="120"/>
        
    <cache name="domainCache"
            maxElementsInMemory="100"
            eternal="true"
            overflowToDisk="true"
            />    
    
    <cache name="entityCache"
    		maxElementsInMemory="100"
    		eternal="true"
    		overflowToDisk="true"
    		/>
            
</ehcache>

三.在代码中使用注解

配置信息整理完之后就可以在代码中使用注解了,如下所示:

@Cacheable(value ="domainCache",key="#id")
public MetaDicDomain getById(String id) {
	MetaDic dic = metaDicDao.get(id);
	MetaDicDomain dicDomain= new MetaDicDomain(dic);
	return dicDomain;
}

PS:需要ehcache的依赖包

这个比较坑,如果少了ehcache的依赖包即使配置好了所有的文件也是没法使用缓存的。。。我这里使用的是ehcache-2.7.5.jar,没有出现问题。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值