本文介紹 Shiro + EHCache + Spring 的結合:java
只介紹spring bean配置方式:spring
一、Spring EhCacheManagerFactoryBean方式建立。apache
二、EhCacheManager方式建立。 緩存
1、EHCache 配置文件代碼。app
二、 EHCache 配置文件說明jvm
<?xml version="1.0" encoding="UTF-8"?>ide
<ehcache >測試
<diskStore path="java.io.tmpdir"/>spa
<!-- name Cache的名稱,必須是惟一的(ehcache會把這個cache放到HashMap裏)線程
maxElementsInMemory 內存中保持的對象數量
maxElementsOnDisk DiskStore中保持的對象數量,默認值爲0,表示不限制
eternal 是不是永恆數據,若是是,則它的超時設置會被忽略
overflowToDisk 若是內存中數據數量超過maxElementsInMemory限制,是否要緩存到磁盤上
timeToIdleSeconds 對象空閒時間,指對象在多長時間沒有被訪問就會失效。只對eternal爲false的有效。默認值0,表示一直能夠訪問
timeToLiveSeconds 對象存活時間,指對象從建立到失效所須要的時間。只對eternal爲false的有效。默認值0,表示一直能夠訪問
diskPersistent 是否在磁盤上持久化。指重啓jvm後,數據是否有效。默認爲false
diskExpiryThreadIntervalSeconds 對象檢測線程運行時間間隔。標識對象狀態的線程多長時間運行一次
diskSpoolBufferSizeMB DiskStore使用的磁盤大小,默認值30MB。每一個cache使用各自的DiskStore
memoryStoreEvictionPolicy 若是內存中數據超過內存限制,向磁盤緩存時的策略。默認值LRU,可選FIFO、LFU-->
<cache name="authorizationCache"
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="false"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120">
</cache>
</ehcache>
ShiroCacheManager實現org.apache.shiro.cache.Cache接口,重寫裏面方法。
看代碼。
package com.ehcache.test;
import org.apache.shiro.cache.Cache;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
//一、建立 Spring 的 IOC 容器
ClassPathXmlApplicationContext ctx =new ClassPathXmlApplicationContext("applicationContext.xml");
//二、獲取IOC容器中ShiroCacheManager實例
ShiroCacheManager<String, String> shiroCacheManager =(ShiroCacheManager<String, String>)ctx.getBean("shiroCacheManager");
Cache<String, String> cache =shiroCacheManager.getCache();
//三、保存
cache.put("key", "12");
System.out.println(cache.get("key"));
System.out.println("***************************");
//四、 刪除
cache.remove("key");
System.out.println(cache.get("key"));
}
}