spring ehcache annotation key自定義


今天在項目中用到了ehcache緩存,將list緩存到ehcache中,但是又存在分頁問題,會傳入Page類,默認的key命名方式失效,網上資料比較少,總結代碼貼上來。

 

spring整合ehcache的配置主要參考http://blog.goyello.com/2010/07/29/quick-start-with-ehcache-annotations-for-spring/,已經非常詳細了,不累贅敘述。

在上篇資料的基礎上,假設controller里面有個這樣的方法:

public List<ActivityDO> queryActivities(Page page, long clubId) {
    List<ActivityDO>result=activityDAO.queryActivityByCludId(page, clubId);
    return result;
}

其中傳入Page和Long型的參數,按照默認的key命名方式,會將page+clubId這種類似的方式命名key,而page每次是不同的實體,導致即使是相同的查詢,也有不同的key,於是,我需要自己寫一個key生成方式,key=page的當前頁+clubid;

package com.xianxing.lxb.common.vo;

import java.io.Serializable;

import com.googlecode.ehcache.annotations.key.AbstractCacheKeyGenerator;

public class PageKeyGenerator extends AbstractCacheKeyGenerator<Serializable>{

    @Override
    public Serializable generateKey(Object... data) {
        
        if(data[0] instanceof com.xianxing.common.lang.Page){
            com.xianxing.common.lang.Page page = (com.xianxing.common.lang.Page) data[0];
            long clubId = (Long) data[1];
            String result = page.getPage() + "-" + clubId;
            return result.hashCode();
        }
        new IllegalArgumentException();
        return null;
    }

}

完成這一步后,可以將注解放入controller中:

@Cacheable(cacheName = "activityCache",keyGenerator = @KeyGenerator (            
           name = "com.xianxing.lxb.common.vo.PageKeyGenerator",                
           properties = @Property( name="includeMethod", value="false")))
public List<ActivityDO> queryActivities(Page page, long clubId) {
        List<ActivityDO> result = activityDAO.queryActivityByCludId(page, clubId);
     return result;
}

這樣就完成了!


免責聲明!

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



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