导入ehcache.jar包到项目中。(必要操作,不多说)
开始spring+Ehcache配置文件。
1,写好一个ehcache.xml放到classpath下
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
ehcache
>
<!--timeToIdleSeconds 当缓存闲置n秒后销毁 -->
<!--timeToLiveSeconds 当缓存存活n秒后销毁 -->
<!-- 缓存配置
name:缓存名称。
maxElementsInMemory:缓存最大个数。
eternal:对象是否永久有效,一但设置了,timeout将不起作用。
timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。
overflowToDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。
diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
maxElementsOnDisk:硬盘最大缓存个数。
diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.
diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。
clearOnFlush:内存数量最大时是否清除。
-->
<
diskStore
path
=
"D:/tmpdir"
/>
<
defaultCache
maxElementsInMemory
=
"500"
eternal
=
"false"
timeToIdleSeconds
=
"300"
timeToLiveSeconds
=
"1200"
overflowToDisk
=
"true"
/>
<
cache
name
=
"young"
maxElementsInMemory
=
"150"
eternal
=
"false"
timeToLiveSeconds
=
"36000"
timeToIdleSeconds
=
"3600"
overflowToDisk
=
"true"
/>
</
ehcache
>
下面开始整合Spring,建立Spring配置文件: applicationContext.xml
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
xsi:schemaLocation="http://www.springframework.org/schema/beans
<!-- 隐式地向 Spring 容器注册
AutowiredAnnotationBeanPostProcessor、
CommonAnnotationBeanPostProcessor、
PersistenceAnnotationBeanPostProcessor 以及
equiredAnnotationBeanPostProcessor 这 4 个 BeanPostProcessor。
在配置文件中使用 context 命名空间之前,
必须在 <beans> 元素中声明 context 命名空间。 -->
<
context:annotation-config
/>
<!-- <context:component-scan/> 配置项不但启用了对类包进行扫描
以实施注释驱动 Bean 定义的功能,
同时还启用了注释驱动自动注入的功能
(即还隐式地在内部注册了 AutowiredAnnotationBeanPostProcessor
和 CommonAnnotationBeanPostProcessor) -->
<
context:component-scan
base-package
=
"young"
/>
<!-- 缓存注解驱动 -->
<
cache:annotation-driven
/>
<!--
<cache:annotation-driven cache-manager="cacheManager" proxy-target-class="false" mode="proxy"/>-->
<!-- cacheManager工厂类 -->
<
bean
id
=
"cacheManagerFactory"
class
=
"org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
p:configLocation
=
"classpath:ehcache.xml"
p:shared
=
"false"
/>
<!-- 声明cacheManager -->
<
bean
id
=
"cacheManager"
class
=
"org.springframework.cache.ehcache.EhCacheCacheManager"
p:cacheManager-ref
=
"cacheManagerFactory"
/>
</
beans
>
最后写一个测试缓存的类 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"
;
}
}