Cacheable註解式快取不起作用的情形

2021-09-07 11:55:13 字數 1251 閱讀 9101

@cacheable註解式快取使用的要點:正確的註解式快取配置,註解物件為spring管理的hean,呼叫者為另乙個物件。有些情形下註解式快取是不起作用的:同乙個bean內部方法呼叫,子類呼叫父類中有快取註解的方法等。後者不起作用是因為快取切面必須走**才有效,這時可以手動使用cachemanager來獲得快取效果。

使用註解式快取的正確方式:

ehcache.xml"/>

要點:@cacheable(value="必須使用ehcache.xml已經定義好的快取名稱,否則會拋異常")

@component

public class cachebean

public string map2(string key)

}@runwith(springjunit4classrunner.class)

@contextconfiguration(locations = )

public class cachetester

@test public void cacheannotation()

}輸出:

get value for key: a

[authorizationcache, authenticationcache, shiro-activesessioncache, passwordretrycache]

稍微改造一下,讓ehcache支援根據預設配置自動新增快取空間,這裡提供自定義的myehcachecachemanager即可

com.itecheast.ite.domain.util.myehcachecachemanager">

另一種改造方式,找不到已定義的快取空間時不快取,或者關閉全部快取。把cachemanagers配置去掉就可以關閉圈閉快取。

呼叫相同類或父類方法沒有快取效果:這時可以選擇手動使用cachemanager。

@runwith(springjunit4classrunner.class)

@contextconfiguration(locations = )

public class cachetester

@cacheable(value="passwordretrycache",key="#key")

public string map(string key)

}

或者再換一種方式:手動使用**方式呼叫同類方法也是可以的

Spring快取註解 Cacheable

cacheable可以標記在乙個方法上,也可以標記在乙個類上。當標記在乙個方法上時表示該方法是支援快取的,當標記在乙個類上時則表示該類所有的方法都是支援快取的。對於乙個支援快取的方法,spring會在其被呼叫後將其返回值快取起來,以保證下次利用同樣的引數來執行該方法時可以直接從快取中獲取結果,而不需...

Spring快取註解 Cacheable

cacheable cacheable 的作用 主要針對方法配置,能夠根據方法的請求引數對其結果進行快取 cacheable 作用和配置方法 引數解釋 example value 快取的名稱,在 spring 配置檔案中定義,必須指定至少乙個 例如 cacheable value mycache c...

Cacheable註解不生效原因

cacheable註解中 乙個方法a調同乙個類裡的另乙個有快取註解的方法b,這樣是不走快取的。例如在同乙個service裡面兩個方法的呼叫,快取是不生效的 解決方案 1.不使用註解的方式,直接取 ehcache 的 cachemanger 物件,把需要快取的資料放到裡面,類似於使用 map,快取的邏...