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" />
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • session.setAttribute(“key”,value);

    session.setAttribute(“key”,value);1、session.setAttribute(“key”,value);是session设置值的方法,原理同java中的HashMap的键值对,意思也就是key现在为“user”;存放的值为userName,userName应该为一个String类型的变量吧?看你自己的定义。2、可以使用session.getAttribute(“key”);来取值,以为着你能得到userName的值。3、注意…

    2022年10月16日
    4
  • java string.split()用字符串分割_java 字符串分割

    java string.split()用字符串分割_java 字符串分割最近写代码时遇到自字符串分割和截取的问题,在此总结一下。字符串的分割:一般自字符串的分割常用的方法是java.lang包中的String.split()方法,返回是一个字符串数组。语法:publicString[]split(Stringregex,intlimit)参数: regex–正则表达式分隔符。 limit–分割的份数。…

    2025年11月11日
    4
  • 我的世界怎么显示坐标_我的世界永久显示坐标

    我的世界怎么显示坐标_我的世界永久显示坐标在我的世界游戏中,坐标这个问题如果玩的很6的话能够帮助我们瞬间移动,去到任何想去的地方,这时有不少玩家不禁想问了,我的世界坐标怎么看,坐标指令又是什么呢?坐标(coordinates)在数字上反映了您在主世界中的位置。坐标基于一个由三条交于一点(即原点)的坐标轴而形成的网格。玩家会出生在距离原点数百方块的位置上。x轴反映了玩家距离原点在东()西(-)方向上的距离,如经度。z轴反映了玩家距离原点在…

    2022年4月19日
    1.4K
  • flyweight设计模式_适配器模式菜鸟

    flyweight设计模式_适配器模式菜鸟亨元模式动机模式定义实例结构要点总结笔记。动机在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价—主要指内存需求方面的代价如何在避免大量细粒度对象问题的同时,让外部客户仍然能够透明地使用面向对象地方式来进行操作模式定义运用共享技术有效地支持大量细粒度地对象。实例每一个字符都是一个字体 字体对象Fontclass Font{private: //unique object key string key; //object

    2022年8月9日
    15
  • oracle教程15 PlSql入门和基本用法举例(很齐全)

    oracle教程15 PlSql入门和基本用法举例(很齐全)无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。PLSQL的简介PLSQL的语法结构例子:SETSERVEROUTPUTONBEGIN –打印输出DBMS_OUTPUT.PUT_LINE(‘hel…

    2022年6月5日
    218
  • 《Java并发编程实战》第十六章 Java内存模型 读书笔记

    《Java并发编程实战》第十六章 Java内存模型 读书笔记

    2021年12月10日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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