spring ehcache配置以及使用(afterPropertiesSet)

spring配置ehcache例子:[url]http://blog.csdn.net/linfanhehe/article/details/7693091[/url][color=red][b]主要特性[/b][/color]1.快速.2.简单.[b]3.多种缓存策略[/b]4.缓存数据有两级:内存和磁盘,因此无需担心…

大家好,又见面了,我是你们的朋友全栈君。spring 配置ehcache例子:[url]http://blog.csdn.net/linfanhehe/article/details/7693091[/url]

[color=red][b]主要特性[/b][/color]

1. 快速.

2. 简单.

[b]3. 多种缓存策略[/b]

4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题

5. 缓存数据会在虚拟机重启的过程中写入磁盘

[b]6. 可以通过RMI、可插入API等方式进行分布式缓存[/b]

7. 具有缓存和缓存管理器的侦听接口

8. 支持多缓存管理器实例,以及一个实例的多个缓存区域

[b]9. 提供Hibernate的缓存实现[/b]

[size=medium][color=red][b]举例说明:timeToLiveSeconds =3600 timeToIdleSeconds =300[/b][/color][/size]

[size=medium][b]以上配置代表缓存有效时间为3600秒(自缓存建立起一个小时有效 ),在有效的一个小时内,如果连续五分钟未访问缓存,则缓存失效,特别说明的是,就算缓存访问从未间断,到一个小时后,缓存也会失效[/b][/size]


<!-- 配置 ehcache -->
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation">
<value>classpath:ehcache.xml</value>
</property>
</bean>
<!-- cacheName ehcache配置文件中的名称 -->
<bean id="mmsCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean">
<property name="cacheManager" ref="cacheManager" />
<property name="cacheName" value="mmsCache" />
</bean>

<bean id="dataProviderService" class="xxx.DataProviderServiceImpl">
<property name="commonDao">
<ref bean="commonDao" />
</property>
<property name="cache" ref="mmsCache"></property>
</bean>


<ehcache updateCheck="false" name="mmsCache">

<defaultCache
maxElementsInMemory="10000"
eternal="true"
overflowToDisk="true">
</defaultCache>

<cache name="mmsCache"
maxElementsInMemory="10000"
eternal="true"
overflowToDisk="false">
</cache>

</ehcache>


import net.sf.ehcache.Cache;
import net.sf.ehcache.Element;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.dao.DataAccessException;

import xxx.dao.cfg.CommonDao;
import xxx.service.cfg.DataProviderService;


public class DataProviderServiceImpl implements DataProviderService,InitializingBean{
private static final Log log = LogFactory.getLog(DataProviderServiceImpl.class);
private net.sf.ehcache.Cache cache;
private CommonDao commonDao;

public Cache getCache() {
return cache;
}
public void setCache(Cache cache) {
this.cache = cache;
}
public CommonDao getCommonDao() {
return commonDao;
}

public void setCommonDao(CommonDao commonDao) {
this.commonDao = commonDao;
}
/**
* InitializingBean 仅仅提供了初始化的方法
*/
@Override
public void afterPropertiesSet() throws Exception {
doCacheMenu();
doCacheUser();
doCacheDeth();
}
private void doCacheMenu() {
String sql = "" ;
// 查询所有开启的菜单
try {
this.put("TMENU", this.commonDao.findNativeSQL(sql,new Object[]{"1","0"}));
log.info("缓存菜单成功!");
} catch (Exception e) {
e.printStackTrace();
log.info("缓存菜单失败!");
}
}
private void doCacheUser() {
// 查询所有用户
try {
this.put("TUSER", this.commonDao.find("from Tuscuser t"));
log.info("缓存用户成功!");
} catch (DataAccessException e) {
e.printStackTrace();
log.info("缓存用户失败!");
}
}
private void doCacheDeth(){
// 查询所有部门
try {
this.put("TDEPT", this.commonDao.find("from Tuscdept t"));
log.info("缓存部门成功!");
} catch (DataAccessException e) {
e.printStackTrace();
log.info("缓存部门失败!");
}
}

public Object get(String key) {
return cache.get(key)!=null?cache.get(key).getObjectValue():key ;
}
public void put(String key, Object value) {
cache.put(new Element(key,value));
}
public void reloadAllCache() {
cache.flush();
}
public void reloadCacheByType(String type) {
// 缓存菜单
if("TMENU".equals(type)){
doCacheMenu();
}
// 刷新用户
if("TUSER".equals(type)){
doCacheUser();
}
// 刷新部门
if("TDEPT".equals(type)){
doCacheDeth();
}
}
}



<?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="java.io.tmpdir" />
<defaultCache
maxElementsInMemory="500"
eternal="false"
timeToIdleSeconds="300"
timeToLiveSeconds="1200"
overflowToDisk="true" />
<cache name="com.Menu" maxElementsInMemory="150"
eternal="false" timeToLiveSeconds="36000"
timeToIdleSeconds="3600" overflowToDisk="true"/>
</ehcache>

[color=red][b]EhcacheUtil工具类使用

[/b][/color]


public class EhcacheUtil {

private static final String path = "/ehcache.xml";

private URL url;

private CacheManager manager;

private static EhcacheUtil ehCache;

private EhcacheUtil(String path) {
url = getClass().getResource(path);
manager = CacheManager.create(url);
}

public static EhcacheUtil getInstance() {
if (ehCache== null) {
ehCache= new EhcacheUtil(path);
}
return ehCache;
}

public void put(String cacheName, String key, Object value) {
Cache cache = manager.getCache(cacheName);
Element element = new Element(key, value);
cache.put(element);
}

public Object get(String cacheName, String key) {
// 通过名称获取cache cacheName在ehcache.xml上定义
Cache cache = manager.getCache(cacheName);
Element element = cache.get(key);
return element == null ? null : element.getObjectValue();
}

public Cache get(String cacheName) {
return manager.getCache(cacheName);
}

public void remove(String cacheName, String key) {
Cache cache = manager.getCache(cacheName);
cache.remove(key);
}

}

[color=red][b]单独使用ehcache[/b][/color]


//从classes目录查找ehcache.xml配置文件
CacheManager cacheManager = CacheManager.getInstance();

//从classes目录查找指定名称的配置文件
//CacheManager cacheManager = CacheManager.create(getClass().getResource("/ehcache.xml"));

//根据配置文件获得Cache实例
Cache cache = cacheManager.getCache("CACHE1");

//清空Cache中的所有元素
cache.removeAll();

//往Cache中添加元素
cache.put(new Element("s1", "11111"));
cache.put(new Element("s2", "22222"));
cache.put(new Element("s3", "33333"));

//从Cache中取得元素
Element e = cache.get("s3");
System.out.println(e.getValue());

//卸载缓存管理器
cacheManager.shutdown();

[color=red][b]页面缓存[/b][/color]

在web.xml文件中配置过滤器。此处对test_tag.jsp页面进行缓存。


<filter>
<filter-name>testPageCachingFilter</filter-name>
<filter-class>net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>testPageCachingFilter</filter-name>
<url-pattern>/test_tag.jsp</url-pattern>
</filter-mapping>

在ehcache.xml文件中配置Cache节点。

[color=red][b]注意:cache的name属性必需为SimplePageCachingFilter。[/b][/color]


<cache name="SimplePageCachingFilter"
maxElementsInMemory="10"
overflowToDisk="true"
eternal="false"
timeToIdleSeconds="100"
timeToLiveSeconds="100"
memoryStoreEvictionPolicy="LFU" />
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/126437.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • python贪吃蛇代码-Python编写简单的贪吃蛇核心代码[通俗易懂]

    python贪吃蛇代码-Python编写简单的贪吃蛇核心代码[通俗易懂]时间:2018-11-14概述:贪吃蛇Python贪吃蛇完整代码,代码注释比较多,可学习一下Python编写游戏的一些基本技巧,代码分享如下:#coding=utf-8importcursesimportthreadingimportrandom#importmsvcrt#fromcursesimporttextpad#!!!addch(y,x,ch)stdscr=curses….

  • 无法解析外部符号

    无法解析外部符号本人在写qt工程的时候遇到无法解析外部符号原因:只写了类声明,但还没有写实现类,造成调用时无法解析。解决方法,把还没有实现类的声明给注释掉。参考博客无法解析的外部符号考虑可能的原因:[0]出现无法解析可能是因为lib文件不正确,比如64位的编译配置,结果使用的是32位的lib包.[1]只写了类声明,但还没有写实现类,造成调用时无法解析[2]声明和定义没有统一,造成链接不一致,无法

  • C/C++程序猿必须熟练应用的开源项目

    C/C++程序猿必须熟练应用的开源项目

  • 异步调用

    异步调用同步调用,即:程序按定义的顺序依次执行的过程,每一行代码执行过程必须等待上一行代码执行完毕后才执行。而异步调用指:程序在执行时,无需等待执行的返回值可继续执行后面的代码。回调。其主要是解决异步方法执行

  • avalondock章节二

    avalondock章节二用avalondock写的界面布局,但是对好多东西还是不懂,最起码布局是懵懵懂懂的,先用VS2010自带的工具文档大纲工具看下它的布局再说,布局如下图所示:看下源代码中的DockingManager:publicclassDockingManager:Control,IOverlayWindowHost//,ILogicalChildrenContainer照代码理解的意思

  • textmate快捷键 汇总

    textmate快捷键 汇总TextMate列编辑模式按住Alt键,用鼠标选择要插入字符的行。如果仅仅是插入字符,注意选择0列-选择多列的话会把它们覆盖掉。选择完毕应该是看到一条细细的竖线,然后输入要插入的字符。TextMate会实时显示所有的更改,很直观,这是TextMate比VIM好的地方。如果只是在许多行前插入空格,则可以选中这些行,使用快捷键Cmd+]增加缩进,在Text…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号