ehcache配置:使用Spring+SpringMVC+Mybatis或者有shiro


SSM框架的搭建就不在敘述了

本文主要是講解在SSM基礎上再加上ehcache

1:首先:pom.xml需要的jar

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis-ehcache</artifactId>
  <version>1.0.0</version>
 </dependency>

 <dependency>
  <groupId>org.ehcache</groupId>
  <artifactId>ehcache</artifactId>
  <version>3.0.1</version>
 </dependency>

 

2:在src/main/resources中添加ehcache.xml的配置文件,該路徑跟隨你的框架而定(大家都懂的)

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
  updateCheck="false">
       <diskStore path="java.io.tmpdir" />
       <defaultCache eternal="false" maxElementsInMemory="1000"
       overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0"
       timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU" />
       <cache name="testCache" eternal="false" maxElementsInMemory="100"
       overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0"
       timeToLiveSeconds="300" memoryStoreEvictionPolicy="LRU" />
</ehcache>

<!-- 這里是說明
name:Cache的唯一標識
maxElementsInMemory:內存中最大緩存對象數
maxElementsOnDisk:磁盤中最大緩存對象數,若是0表示無窮大
eternal:Element是否永久有效,一但設置了,timeout將不起作用
overflowToDisk:配置此屬性,當內存中Element數量達到maxElementsInMemory時,Ehcache將會Element寫到磁盤中
timeToIdleSeconds:設置Element在失效前的允許閑置時間。僅當element不是永久有效時使用,可選屬性,默認值是0,也就是可閑置時間無窮大
timeToLiveSeconds:設置Element在失效前允許存活時間。最大時間介於創建時間和失效時間之間。僅當element不是永久有效時使用,默認是0.,也就是element存活時間無窮大
diskPersistent:是否緩存虛擬機重啟期數據
diskExpiryThreadIntervalSeconds:磁盤失效線程運行時間間隔,默認是120秒
diskSpoolBufferSizeMB:這個參數設置DiskStore(磁盤緩存)的緩存區大小。默認是30MB。每個Cache都應該有自己的一個緩沖區
memoryStoreEvictionPolicy:當達到maxElementsInMemory限制時,Ehcache將會根據指定的策略去清理內存。默認策略是LRU(最近最少使用)。你可以設置為FIFO(先進先出)或是LFU(較少使用) -->

 

3:在spring-mybatis.xml中假如encache的配置

<!-- 使用ehcache緩存 -->
    <bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
        <property name="configLocation" value="classpath:ehcache.xml" />
    </bean

--------重點來了---------

假如你的框架里面集成了shiro,這里就需要變下了,具體配置如下

<!-- MyBatis使用ehcache緩存 start -->  
    <bean id="ehCacheManager"  
        class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">  
        <property name="configLocation" value="classpath:ehcache.xml" />  
        <property name="shared" value="true"></property> <!-- 這里是關鍵!!!沒有必錯  -->  
    </bean>  
    <!-- end MyBatis使用ehcache緩存 -->  
<!-- 緩存管理器 使用Ehcache實現 --> <bean id="shiroCacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager"> <property name="cacheManager" ref="ehCacheManager" /> </bean>

 

4:最后在你的mapper.xml中配置encache,加入以下配置

<cache type="org.mybatis.caches.ehcache.LoggingEhcache" >  
      <property name="timeToIdleSeconds" value="3600"/>
      <property name="timeToLiveSeconds" value="3600"/>
      <property name="maxEntriesLocalHeap" value="1000"/>  
      <property name="maxEntriesLocalDisk" value="10000000"/>  
      <property name="memoryStoreEvictionPolicy" value="LRU"/>  
  </cache>

 

這里說明下,LoggingEhcache  這個會在打印log,如果不像要log的話可以使用EhcacheCache 

最后說明下,按照我這樣配置的話,這個mapper.xml里面的操作是全局,默認為useCache="true"  都會有作用,

假如某個業務是不要緩存的,可以在當前業務下加上useCache="false"

<select id="selectByName" resultMap="BaseResultMap" parameterType="java.lang.String" useCache="false">

 

---------本博文為博主根據互聯網資料加上自己實際應用原創,可以轉載但需說明出處--------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM