Spring與Ehcache簡單自定義監聽器配置

1、簡介

EhCache 是純Java實現的簡單、快速的Cache組件。EHCache支持內存和磁盤兩級緩存,支持LRU、LFU和FIFO多種淘汰算法,支持經過rmi,jgroup,jms實現分佈式緩存,能夠做爲Hibernate的緩存插件。同時它也能提供基於Filter的Cache,提供緩存管理的監聽接口,這對業務處理很是有用,且能與Spring良好結合。java

2、應用場景

你有幾個cache 每一個cache中只存放一種類型的對象,當不一樣類型的對象,put/update/expired cache時你須要分別對這不一樣類型的對象有一些操做,並且不一樣對象,處理方式是徹底不同的。那麼你就須要爲這每一個cache配置一個單獨的監聽器類,下面提供一種利用Spring的簡單是用的配置方式。算法

3、簡單實現方式

    下面配置描述了以下場景,配置有兩個cache用來緩存卡數據對象和報警數據對象,並分別對兩個cache採用單獨的監聽器實現類,方便實現對事件的不一樣響應
    一、ehcache.xmlspring

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
  updateCheck="false" monitoring="off">
  <diskStore path="java.io.tmpdir" />
  <defaultCache maxElementsInMemory="200" eternal="false"
      overflowToDisk="true" diskPersistent="true"
      diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LFU" />
 
  <cache name="cardStateCache" maxElementsInMemory="10000" eternal="false"
      timeToIdleSeconds="30"   >
      <cacheEventListenerFactory   class="com.listener.CacheEventListenerFactory"
          properties="bean=locationListener" />
  </cache>
 
  <cache name="alarmRecordCache" maxElementsInMemory="1000" eternal="false"
      timeToIdleSeconds="120"   >
      <cacheEventListenerFactory class="com.listener.CacheEventListenerFactory"
          properties="bean=alarmRecordListener"/> 
  </cache>
</ehcache>

 二、spring配置 緩存

 <?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:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd 
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx.xsd 
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd"
default-lazy-init='true'>
 
    <bean name="springContextTool" class="com.helper.SpringContextHelper"
        lazy-init="false"></bean>
     
    <!-- 緩存管理器 -->
    <bean id="cacheManager"
        class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
        scope="singleton">
        <property name="configLocation">
            <value>classpath:ehcache.xml</value>
        </property>
        <property name="shared" value="true" />
    </bean>
 
    <!-- 報警信息緩存 -->
    <bean id="alarmRecordCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean" >
        <property name="cacheManager">
            <ref local="cacheManager" />
        </property>
        <property name="cacheName">
            <value>alarmRecordCache</value>
        </property>
    </bean>
     
    <!-- 卡狀態信息緩存 -->
    <bean id="cardStateCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean" >
        <property name="cacheManager">
            <ref local="cacheManager" />
        </property>
        <property name="cacheName">
            <value>cardStateCache</value>
        </property>
    </bean>
     
    <!-- 緩存監聽器 配置 -->
    <bean id="alarmRecordListener" class="com.listener.AlarmRecordListener"
        lazy-init="false" />
    <bean id="locationListener" class="com.listener.LocationListener"
        lazy-init="false" />
  </beans>

   三、java 代碼 架構

public class CacheEventListenerFactory extends net.sf.ehcache.event.CacheEventListenerFactory{
    
   @Override
   public CacheEventListener createCacheEventListener(Properties properties) {
       String beanName = properties.getProperty( "bean" );
       if ( beanName == null ) {
           throw new IllegalArgumentException( "緩存監聽器名字未定義" );
       }
       return (CacheEventListener) SpringContextHelper.getBean( beanName );
   }
}

public class LocationListener implements CacheEventListener {
   //你的監聽器實現類,實現ehcache的CacheEventListener接口
}

能夠看到,簡單的利用Spring的Ioc,就能夠很簡單、方便的實現上述業務需求、框架

4、其餘主流緩存框架一覽

一、OSCache是另一個開源的緩存方案。它同時還支持JSP頁面或任意對象的緩存。OSCache功能 強大、靈活,和EHCache同樣支持read-only和read/write緩存、支持內存和磁盤緩存。同時,它還提供經過JGroups或JMS進行集羣的基本支持。
二、SwarmCache 是一個簡單的、基於JavaGroups提供集羣的緩存方案。支持read-only和nonstrict read/write緩存。這種緩存適用於讀操做遠遠高於寫操做頻率的應用。
三、JBoss TreeCache 是一個強大的、可複製(同步或異步)和支持事務的緩存。若是你須要一個真正的支持事務的緩存架構,使用這個方案吧。 異步

相關文章
相關標籤/搜索