2016-11-29 57 views
1

使用@Caching註釋,spring允許將多個@Cacheable註釋添加到單個方法。由於conditional caching可能使用@Cacheable,所以評估的註釋和條件的順序是什麼?如果多個評估爲true,那麼這些值是否存儲在多個緩存中?同樣,在緩存獲取期間,所有條件都是並行計算的,並且值是從任何緩存中獲取的,條件計算結果爲true?使用spring @Caching時,緩存層的順序是什麼?

例如考慮:

@Caching(cacheable = { @Cacheable(cacheNames="smallBooks", condition="#name.length < 32"), @Cacheable(cacheNames="fiction", condition="#domain.equals('fiction')"), @Cacheable(cacheNames="everythingelse")}) 
public Book findBook(String name, String domain) 

回答

1

否沒有並行評估,所述@Cacheable註解越來越gathered in the order of definition按照鏈接的代碼(可高速緩存屬性是一個數組畢竟)。意識到您正在使用不同的名稱和條件定義3個獨立的緩存很重要。

因爲我不知道在這裏你的使用情況是Spring Caching Guide稍做修改:

//.. 
@Override 
@Caching(cacheable = { 
     @Cacheable(cacheNames = "sth"), 
     @Cacheable(cacheNames="everythingelse") 
}) 
public Book getByIsbn(String isbn) { 
    simulateSlowService(); 
    return new Book(isbn, "Some book"); 
} 
//.. 

,並通過在高速緩存包中的春天啓動的application.properties定義DEBUG級別:

logging.level.org.springframework.cache=DEBUG 

您可以看到它是如何作爲獨立的緩存加載的:

2016-11-29 00:52:26.472 DEBUG 23426 --- [   main] o.s.c.a.AnnotationCacheOperationSource : Adding cacheable method 'getByIsbn' with attribute: [Builder[public hello.Book hello.SimpleBookRepository.getByIsbn(java.lang.String)] caches=[sth] | key='' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='' | unless='' | sync='false', Builder[public hello.Book hello.SimpleBookRepository.getByIsbn(java.lang.String)] caches=[everythingelse] | key='' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='' | unless='' | sync='false']