码迷,mamicode.com
首页 > 编程语言 > 详细

spring+shiro+ehcache整合

时间:2018-01-02 23:31:06      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:policy   time   ref   间隔   rate   java   img   esc   tab   

1.导入jar包(pom.xml文件)

                 <!-- ehcache缓存框架 -->
		<dependency>
			<groupId>net.sf.ehcache</groupId>
			<artifactId>ehcache-core</artifactId>
			<version>2.6.11</version>
		</dependency>    

  Spring 整合 ehcache 包 spring-context-support 包

2.使用 ehcache ,导入 ehcache.xml 配置文件

解压 ehcache-core.jar 包 ,将 ehcache-failsafe.xml 复制 src/main/resources
改名 ehcache.xml

 

ehcache.xml文件

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

    <diskStore path="java.io.tmpdir"/>
	<!-- 默认缓存区 -->
    <defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            maxElementsOnDisk="10000000"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU">
        <persistence strategy="localTempSwap"/>
    </defaultCache>
    <!-- 自定义缓存区 -->
    <cache name="bos"
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            maxElementsOnDisk="10000000"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU">
        <persistence strategy="localTempSwap"/>
    </cache>
    <!-- 自定义缓存区 -->
    <cache name="standard"
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            maxElementsOnDisk="10000000"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU">
        <persistence strategy="localTempSwap"/>
    </cache>
    
</ehcache>name

  

diskStore 
指定数据存储位置,可指定磁盘中的文件夹位置
defaultCache 
默认的管理策略 
  name
Cache的名称,必须是唯一的(ehcache会把这个cache放到HashMap里)
maxElementsInMemory
在内存中缓存的element的最大数目
如果放入cache中的元素超过这个数值,有两种情况: 
1、若overflowToDisk的属性值为true,会将cache中多出的元素放入磁盘文件中。 
2、若overflowToDisk的属性值为false,会根据memoryStoreEvictionPolicy的策略替换cache中原有的元素。 
eternal
设定缓存的elements是否永远不过期。
如果为true,则缓存的数据始终有效,
如果为false那么还要根据timeToIdleSeconds,timeToLiveSeconds判断。
  overflowToDisk
如果内存中数据超过内存限制,是否要缓存到磁盘上。
maxElementsOnDisk
在磁盘上缓存的element的最大数目,默认值为0,表示不限制。 
 timeToIdleSeconds
对象空闲时间,指对象在多长时间没有被访问就会失效。只对eternal为false的有效。默认值0,表示一直可以访问。以秒为单位。
timeToLiveSeconds 对象存活时间,指对象从创建到失效所需要的时间。只对eternal为false的有效。默认值0,表示一直可以访问。以秒为单位。 
diskPersistent 是否在磁盘上持久化。指重启jvm后,数据是否有效。默认为false。 
diskExpiryThreadIntervalSeconds
对象检测线程运行时间间隔。标识对象状态的线程多长时间运行一次。以秒为单位。
iskSpoolBufferSizeMB
DiskStore使用的磁盘大小,默认值30MB。每个cache使用各自的DiskStore。 
memoryStoreEvictionPolicy
如果内存中数据超过内存限制,向磁盘缓存时的策略。默认值LRU,可选FIFO、LFU。 
缓存的3 种清空策略 : 
FIFO ,first in first out (先进先出). 
LFU , Less Frequently Used (最少使用).意思是一直以来最少被使用的。缓存的元素有一个hit 属性,hit 值最小的将会被清出缓存。 
LRU ,Least Recently Used(最近最少使用). (ehcache 默认值).缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。

 

3.applicationContext-ehcache.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	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.xsd ">
 
	 <!-- 缓存配置  -->
	<bean id="ehCacheManager" 
		class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
		<property name="configLocation" value="classpath:ehcache.xml" />
	</bean>
	
	<!-- shiro封装cacheManager -->
	<bean id="shiroCacheManager" 
		class="org.apache.shiro.cache.ehcache.EhCacheManager">
		<property name="cacheManager" ref="ehCacheManager" />
	</bean>
	
	<!-- spring 封装ehcache缓存管理器  -->
	<bean id="springCacheManager" 
		class="org.springframework.cache.ehcache.EhCacheCacheManager">
		<property name="cacheManager" ref="ehCacheManager" />
	</bean>
	
	<!-- 激活spring 缓存注解 -->
	<cache:annotation-driven cache-manager="springCacheManager"/>
	
</beans>

  加载该配置文件

4.修改web.xml文件

<!-- spring配置文件位置 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext*.xml</param-value>
	</context-param>

 5.将cache管理器注入到安全管理器中 

技术分享图片

6.对认证数据、授权数据 哪些进行缓存 ?

技术分享图片

技术分享图片

对应到ehcache.xml文件中的自定义的缓存缓存区

注意: 使需要缓存对象,实现 Serializable 接口

使用注解进行开发

第七步: 在被 spring 管理 bean 对象方法上 使用@Cacheable 、@CacheEvict
@Cacheable 应用缓存区,对方法返回结果进行缓存 ---- 用于查询方法
@CacheEvict 清除缓存区数据 --- 用于 增加、修改、删除 方法

 

spring+shiro+ehcache整合

标签:policy   time   ref   间隔   rate   java   img   esc   tab   

原文地址:https://www.cnblogs.com/fjkgrbk/p/ehcache_spring_shiro.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!