2016-11-29 8 views
1

Используя аннотацию @Caching, пружина позволяет добавлять несколько аннотаций @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 как на связанный код (кэшируемым свойство является массивом Afterall). Важно понимать, что вы определяете 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"); 
} 
//.. 

и определяя DEBUG уровень в пакете кэширования в application.properties весной ботинка:

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']