SSM構成ehcache

16942 ワード

1.依存の追加
<dependency>
   <groupId>net.sf.ehcachegroupId>
    <artifactId>ehcacheartifactId>
    <version>2.10.4version>
dependency>
<dependency>
    <groupId>org.mybatisgroupId>
    <artifactId>mybatis-ehcacheartifactId>
    <version>1.0.0version>
dependency>

2.ehcache.xmlプロファイル

<ehcache name="es">

    <diskStore path="java.io.tmpdir"/>

    

    

    <defaultCache
            maxEntriesLocalHeap="1000"
            eternal="false"
            timeToIdleSeconds="3600"
            timeToLiveSeconds="3600"
            overflowToDisk="false">
    defaultCache>

    <cache name="shiro-authenticationCache"
           maxEntriesLocalHeap="1000"
           eternal="false"
           timeToIdleSeconds="600"
           timeToLiveSeconds="600"
           overflowToDisk="false"
           statistics="true">
    cache>

    <cache name="shiro-authorizationCache"
           maxEntriesLocalHeap="2000"
           eternal="false"
           timeToIdleSeconds="600"
           timeToLiveSeconds="600"
           overflowToDisk="false"
           statistics="true">
    cache>

    <cache name="shiro-userCache"
           maxEntriesLocalHeap="2000"
           eternal="false"
           timeToIdleSeconds="600"
           timeToLiveSeconds="600"
           overflowToDisk="false"
           statistics="true">
    cache>

    <cache name="basecache"
           maxElementsInMemory="200"
           maxElementsOnDisk="1000"
           eternal="false"
           overflowToDisk="true"
           timeToIdleSeconds="300"
           timeToLiveSeconds="600"
           memoryStoreEvictionPolicy="LFU"
           diskSpoolBufferSizeMB="20">
    cache>

ehcache>

3.springプロファイル
    
    <bean id="ehCacheManager"
          class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
        <property name="configLocation" value="classpath:ehcache.xml"/>
        <property name="shared" value="true"/> 
    bean>

    
    <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
        <property name="cacheManager" ref="ehCacheManager"/>
    bean>

    
    <cache:annotation-driven cache-manager="cacheManager" />

注意プロジェクトにshiroが追加された場合はを必ず追加しなければなりません.そうしないと、エラーが発生します.
ehcacheの使用
1.mapper.xmlファイルにを追加
   

<mapper namespace="com.kou.mapper.HelloMapper">

    <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>

    <select id="getAll" resultType="map">
        select * from customer order by id desc
    select>

    <delete id="deleteById" parameterType="int">
        delete from customer where id = #{id}
    delete>

mapper> 

LoggingEhcacheこれはロゴを印刷していますが、ロゴを必要としない場合はEhcacheCacheを使用できます
上記の構成によれば、このmapper.xmlの操作はグローバルであり、デフォルトではuseCache="true"が機能します.
ビジネスがキャッシュされない場合は、現在のビジネスにuseCache="false"を追加できます.
<select id="selectByName" resultMap="BaseResultMap" parameterType="java.lang.String" useCache="false">

2.serviceレイヤを@Cacheable注記でマークアップするクエリー方法
    @TriggersRemove(cacheName="baseCache",removeAll=true)
    public Entity save(Entity entity) throws CrudException {
        return entity;
    }

    @TriggersRemove(cacheName="baseCache",removeAll=true)
    public Entity update(Entity entity) throws CrudException {
        return entity;
    }

    @TriggersRemove(cacheName="baseCache",removeAll=true)
    public void del(Entity entity) throws CrudException {
            }

    @Cacheable(value="baseCache", key = "‘findAll‘")    
    public List findAll() throws SearchException {
        return list;
    }
  • @Cacheable(value=”baseCache”, key = “‘findAll‘”)
  • この注記はデータをキャッシュすることです.cacheNameはehcache.xmlの
  • を構成します.
  • @TriggersRemove(cacheName=”baseCache”,removeAll=true)
  • この注釈の役割は、データが変化するとキャッシュをクリアし、データ同期
  • を行うことである.

    @Cacheableでは、value、key、conditionの3つのプロパティを指定できます.
  • value
  • @Cacheable("cache 1")、@Cacheable({"cache 1","cache 2"})/Cacheは、cache 1およびcache 2で発生する
  • である
  • valueプロパティは、現在のメソッドの戻り値がどのCacheにキャッシュされるかを示す指定する必要があります.Cacheの名前に対応します.これは、1つのCacheであってもよいし、複数のCacheを指定する必要がある場合に配列であってもよい.

  • key
  • @Cacheable(value=”users”, key=”#user.id”)、@Cacheable(value=”users”, key=”#p0”)
  • keyプロパティは、Springキャッシュメソッドの戻り結果を指定するときに対応するkeyです.この属性はSpringEL式をサポートします.この属性が指定されていない場合、Springはデフォルトのポリシーを使用してkeyを生成します.ここではまず、SpringのEL式でkeyを指定できるカスタムポリシーを見てみましょう.ここでのEL式は、方法パラメータおよびそれらに対応する属性
  • を用いることができる.
  • condition
  • @Cacheable(value={“users”}, key=”#user.id”, condition=”#user.id%2==0”)
  • メソッドのすべての戻り結果をキャッシュすることを望んでいない場合があります.この機能はconditionプロパティで実現できます.conditionプロパティのデフォルトは空で、すべての呼び出し状況がキャッシュされることを示します.その値はSpringEL式で指定され、trueの場合はキャッシュ処理を行うことを示す.falseの場合、キャッシュ処理を行わないことを示します.すなわち、メソッドが呼び出されるたびに、メソッドが実行されます.以上の例では、userのidが偶数の場合にのみキャッシュが行われることを示しています.


  • その他
  • @CachePut("users")は、キャッシュに以前に実行された結果があるかどうかを確認し、その方法を毎回実行し、指定したキャッシュに実行結果をキー値ペアとして格納します.@CachePutはクラスやメソッドにも表記できます.@CachePutを使用するときに指定できる属性は@Cacheableと同じです.
  • @CacheEveict(value="users",allEntries=true)allEntriesはbooleanタイプで、キャッシュ内のすべての要素をクリアする必要があるかどうかを示します.デフォルトはfalseで、必要ないことを示します.allEntriesをtrueとして指定すると、Spring Cacheは指定したkeyを無視します.ある時、Cacheはすべての要素を除去する必要があります.これは1つの要素よりも効率的です.
  • @CacheEveict(value="users"、beforeInvocation=true)パージ操作は、デフォルトでは、対応するメソッドが正常に実行された後にトリガーされます.つまり、メソッドが例外を放出して正常に戻ることができなかった場合、パージ操作はトリガーされません.beforeInvocationを使用すると、パージ操作がトリガーされる時間を変更できます.プロパティ値がtrueであることを指定すると、Springはメソッドを呼び出す前にキャッシュ内の指定した要素をパージします.