[英]Spring caching works only sometimes
我有一個Spring控制器,想緩存響應。 當我將@Cacheable
注釋從getBooks
移到doGetBooks
方法時,緩存將停止。 一旦將其移回getBooks
方法,緩存將再次起作用。 為什么會這樣,我該如何解決?
這將緩存公共方法響應
@GetMapping
@Cacheable(value = "cache", key = "{ #root.methodName }")
public Books getBooks(@RequestHeader(value = "user-agent", required = false) String userAgent) throws Exception {
if(valid) {
return this.doGetBooks();
}
throw new Exception();
}
public Books doGetBooks() throws Exception{
...
這將永遠不會緩存私有方法響應
@GetMapping
public Books getBooks(@RequestHeader(value = "user-agent", required = false) String userAgent) throws Exception {
if(valid) {
return this.getBooks();
}
throw new Exception();
}
@Cacheable(value = "cache", key = "{ #root.methodName }")
public Books doGetBooks() throws Exception{
...
問題:您在同一類中調用doGetBooks(),並且Spring緩存需要AOP代理到被調用的方法。
這是一個很好的討論,描述了Spring AOP為什么不能攔截其他類方法調用的方法 :方法中的AOP調用方法
至少有三種解決方法:
一旦調用了Spring Cache可以攔截(通過AOP)的方法,那么@Cacheable()批注就應該觸發。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.