key() 指定快取的key的值,不指定預設使用方法引數的值
@cacheput 在目標方法之後呼叫,將返回結果新增到快取中
@cacheable 首先查詢快取,生成keygenerator()
@cacheevict 刪除快取,可以設定在呼叫方法前後執行
以上3個方法一般都加在service層的黨法上
快取服務模擬其他服務應該是配置在乙個自動配置類中cacheautoconfiguration中,我們點進這個類
@configuration
@conditionalonclass
(cachemanager.
class
)@conditionalonbean
(cacheaspectsupport.
class
)@conditionalo****singbean
(value = cachemanager.
class
, name =
"cacheresolver"
)@enableconfigurationproperties
(cacheproperties.
class
)@autoconfigureafter()
//這裡向容器中注入了乙個元件,我們點進這個元件cacheconfigurationimportselector
@import
(cacheconfigurationimportselector.
class
)public
class
cacheautoconfiguration
//這裡打個斷點
return imports;
/**imports =
* 0 = "org.springframework.boot.autoconfigure.cache.genericcacheconfiguration"
* 1 = "org.springframework.boot.autoconfigure.cache.jcachecacheconfiguration"
* 2 = "org.springframework.boot.autoconfigure.cache.ehcachecacheconfiguration"
* 3 = "org.springframework.boot.autoconfigure.cache.hazelcastcacheconfiguration"
* 4 = "org.springframework.boot.autoconfigure.cache.infinispancacheconfiguration"
* 5 = "org.springframework.boot.autoconfigure.cache.couchbasecacheconfiguration"
* 6 = "org.springframework.boot.autoconfigure.cache.rediscacheconfiguration"
* 7 = "org.springframework.boot.autoconfigure.cache.caffeinecacheconfiguration"
* 8 = "org.springframework.boot.autoconfigure.cache.******cacheconfiguration"
* 9 = "org.springframework.boot.autoconfigure.cache.noopcacheconfiguration"
預設是只有******cacheconfiguration 這個配置類生效(debug=true)
控制台列印如下:
******cacheconfiguration matched:
- cache org.springframework.boot.autoconfigure.cache.******cacheconfiguration automatic cache type (cachecondition)
- @conditionalo****singbean (types: org.springframework.cache.cachemanager; searchstrategy: all) did not find any beans (onbeancondition)
*/}}
//點進******cacheconfiguration,這是乙個配置類
@configuration
@conditionalo****singbean
(cachemanager.
class
)@conditional
(cachecondition.
class
)class
******cacheconfiguration
return
this
.customizerinvoker.
customize
(cachemanager);}
//然後我們繼續點進concurrentmapcachemanager這個類,這個類是用來管理caches的,點進getcache()方法
@override
@nullable
public cache getcache
(string name)}}
// 最終獲取到cache並返回出去
return cache;
//concurrentmapcache是預設返回的cache型別,我們點進去看看
//在cache中,所有的快取資料都是以(k,v)型別進行儲存的,用乙個map store 屬性進行維護
public
class
concurrentmapcache
extends
abstractvalueadaptingcache
// 新增快取內容的方法
@override
public
void
put(object key,
@nullable object value)
// 刪除快取內容的方法
@override
public
void
evict
(object key)
// 最後可以在各個方法內打個斷點試一試了,用@cacheable註解,然後在瀏覽器中訪問2次 分別檢視**走向
在@cacheable()中可以新增以下屬性
名字位置
描述示例
methodname
root object
當前被呼叫的方法名
#root.methodname
method
root object
當前被呼叫的方法
#root.method.name
target
root object
當前被呼叫的目標物件
#root.target
targetclass
root object
當前被呼叫的目標物件類
#root.targetclass
args
root object
當前被呼叫的方法引數列表
#root.args[0]
caches
root object
當前方法呼叫使用的快取列表
如:@cacheable(value=)
#root.root.cahches[0].name
argument name
root object
方法引數的名字,可以直接用#id、#a0、#p0呼叫,0代表索引
#iban、#a0、#p0
result
root object
方法執行的返回值,@cacheable不能呼叫
#result
應用示例:
@cacheable(name =「emp」,key="#id", ) 同時支援自定義keygenerator(),用key就不用keygenerator;
azkaban web server原始碼解析
azkaban主要用於hadoop相關job任務的排程,但也可以應用任何需要排程管理的任務,可以完全代替crontab。azkaban主要分為web server 任務上傳,管理,排程 executor server 接受web server的排程指令,進行任務執行 1.資料表 projects 工...
JDK LinkedHashMap原始碼解析
今天來分析一下jdk linkedhashmap的源 public class linkedhashmapextends hashmapimplements map可以看到,linkedhashmap繼承自hashmap,並且也實現了map介面,所以linkedhashmap沿用了hashmap的大...
Redux原始碼createStore解讀常用方法
const store createstore reducer,preloadedstate enhancer 直接返回當前currentstate,獲取state值,return state 我覺得應該深轉殖乙個新的物件返回,不然有可能會被外部修改 function getstate consol...