Spring下Ehcache缓存的配置文档说明
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Ehcache缓存单机环境配置
以下的配置是针对DAO层而言的,Controller层不需要做配置。
步骤一:配置pom.xml文件
在文件中引入以下几个依赖项:
<dependency>
<groupId>com.googlecode.ehcache</groupId>
<artifactId>spring-annotations-osgi</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>net.sourceforge.ehcache</groupId>
<artifactId>.sf.ehcache</artifactId>
<version>2.2.0</version>
</dependency>
步骤二:配置template.mf
在”Import-Package”之后”Excluded-Exports”之前引入三条配置项,注意包名之前要留一个空格,如下红色字体显示部分:
Import-Package: org.springframework.context.config;version="[3.0.5,4)",
com.googlecode.ehcache.annotations;version="1.1.0",
com.googlecode.ehcache.annotations.key;version="1.1.0",
org.springframework.aop.aspectj.autoproxy
Excluded-Exports: com.mpr.mprsp.mcrc.service.mcrs.publisher.internal.*
步骤三:配置Spring的配置文件applicationContext.xml:
首先在文件的头部加上ehcache的dtd声明,然后配置ehcache缓存管理器。
具体配置如下红色字体所示:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="/schema/beans"
xmlns:ehcache="/svn/schema/ehcache-sprin g"
xsi:schemaLocation="/schema/beans
/schema/beans/spring-beans-3.0.xsd
/svn/schema/ehcache-spring
/svn/schema/ehcache-spring/ehcache-spring -1.1.xsd">
<context:component-scan base-package="com.mpr.mprsp.mcrc.service.mcrs.publisher" />
<!-- ehcache config Start -->
<ehcache:annotation-driven />
<ehcache:config cache-manager="cacheManager">
<!—缓存的失效时间,单位:分-->
<ehcache:evict-expired-elements interval="1440" />
</ehcache:config>
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="osgibundlejar:/META-INF/ehcache/ehcache.xml" />
</bean>
<!-- ehcache config End -->
特殊说明:
1.ehcache缓存管理器的配置位置紧接在context:component-scan节点之后。
2.配置缓存失效时间是当代码中没有配置移除缓存的触发条件时,让缓存内容自动过期。
步骤四:添加本地缓存的配置文件ehcache.xml:
该文件可以放置在:/META-INF/ehcache/ehcache.xml,可参考applicationContext.xml的目录位置:/META-INF/spring/applicationContext.xml。
ehcache.xml文件内容如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="/ehcache.xsd"
updateCheck="false">
<diskStore path="java.io.tmpdir" />
<!-- default cache -->
<defaultCache eternal="false" maxElementsInMemory="1000"
overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0"
timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU" /> <cache name="noticeCache" eternal="false" maxElementsInMemory="1000"
overflowToDisk="true" diskPersistent="false" timeToIdleSeconds="0"
timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU" />
</ehcache>
特殊说明:
1.该配置文件不能有中文注释,否则Linux环境下应用会在启动时报错。
2.可以定义多个cache节点,名称不一样即可。
步骤五:在DAO的实现类上使用ehcache缓存
使用示例如以下红色字体标注:
@Cacheable(cacheName = "friendshipsCache")
public List<FriendShipInfo> query(FriendShipInfoParams params) throws Exception{}
@Cacheable(cacheName = "friendshipsTotalCache")
public int query(FriendShipInfoParams params) throws Exception{}
@TriggersRemove(cacheName = {"friendshipsCache","friendshipsTotalCache"}, when = When.AFTER_METHOD_INVOCATION, removeAll = true)
public int add(FriendShipInfo info) throws Exception{}
特殊说明:
1.cacheName即是在ehcache.xml文件中配置的缓存名称;
2.一般来说,在查询或者统计时才需要缓存结果集,而在新增、编辑及删除的时候需要移
除缓存,这样才能保证在数据有变动时,再调用查询方法所取得的结果是正确的;
3.如果查询参数是对象类型的,如FriendShipInfoParams params,则需要
FriendShipInfoParams类实现Serializable接口并生成一个唯一的serialVersionUID,同时还重写hashCode方法与equals方法。
方法中的字段视查询条件而定,原则上来讲只要能确保对象的唯一性即可。
Ehcache缓存集群环境配置
配置Echcache集群只需将上述步骤四的配置稍作修改即可。
集群环境为两台机器,IP分别以下:
主机A ip:172.16.20.65
主机B ip:172.16.20.25
修改ehcache.xml文件内容如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="/ehcache.xsd"
updateCheck="false">
<diskStore path="java.io.tmpdir" />
<cacheManagerPeerProviderFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" properties="peerDiscovery=manual,rmiUrls=//172.16.20.25:40000/noticeCache|//172 .16.20.25:40000/noticesCache"/>
<cacheManagerPeerListenerFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
properties="hostName=172.16.20.65,port=40000,socketTimeoutMillis=120000" />
<!-- default cache -->
<defaultCache eternal="false" maxElementsInMemory="1000"
overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0"
timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU">
<cacheEventListenerFactory
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" />
</ defaultCache >
<cache name="noticeCache" eternal="false" maxElementsInMemory="1000"
overflowToDisk="true" diskPersistent="false" timeToIdleSeconds="0"
timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU" />
<cacheEventListenerFactory
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" />
</ cache >
<cache name="noticesCache" eternal="false" maxElementsInMemory="1000"
overflowToDisk="true" diskPersistent="false" timeToIdleSeconds="0"
timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU" />
<cacheEventListenerFactory
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" />
</ cache >
</ehcache>
说明:
1)配置cacheManagerPeerProviderFactory是指定除自身之外的网络群体中其他提供同步的主机列表,用“|”分开不同的主机;在上述配置中,其他集群网络的IP为:172.16.10.25。
2)配置cacheManagerPeerListenerFactory是配置宿主主机配置监听程序,来发现其他主机发来的同步请求。
在上述配置中,宿主主机IP为:172.16.10.65。
3)确保所监听的端口已被服务器打开并且没有被占用。
上述配置中,监听的端口为:40000。