2017-09-25 14 views
0

이 항목에 대해 여러 가지 질문이 있음을 잘 알고 있지만 이해할 수 없습니다. 문제가있는 것 같습니다 @CachePut 새 값을 @Cacheable 목록에 추가하지 않습니다.@Cacheable()이 올바른 캐시를 반환하지 않음

문제를 디버깅 한 후 이라는 문 제가이 키에있는 것으로 나타났습니다. 여기

는 코드 내가 저장 방법을 호출 할 때, 키가 정수를 증가한다 캐싱에 사용되는 그래서 조각

@CacheConfig(cacheNames = "documents") 
interface DocumentRepository { 

@CachePut(key = "#a0.id") 
Document save(Document document); 

@Cacheable() 
List<Document> findAll(); 
} 

, 또는 1,2,3 ... 이다 그러나 나는 얻을 때 모든 문서에서 캐시는 SimpleKey []를 키로 사용합니다. @Cacheable에 동일한 키를 사용하려고하면 SpelEvaluationException이 발생하고 'id'속성을 null에서 찾을 수 없습니다.

마지막으로 남은 것은 기능적 캐시 (데이터는 캐시에 저장 됨)이지만 어떻게 든 검색 할 수는 없습니다. 기본 캐시 구현은 EhCache입니다.

답변

1

나는 당신이 여기서 무엇을 기대하고 있는지 정말로 이해하지 못합니다.

findAll 메서드가 documents이라는 캐시의 전체 콘텐츠를 반환 할 것으로 예상됩니다. 설명서에이 기능이 존재한다고 결론을 내릴 수있는 내용이 없다고 생각합니다. 그것은 또한 매우 연약합니다. 이를 구현하는 경우 findAll은 캐시의 상태에 따라 다른 결과를 반환합니다. 예를 들어 누군가가이 캐시의 최대 크기가 100이되도록 구성 할 수 있습니다. 또는 시작시 캐시가 예열 상태가 아닌 경우.

"개체 목록"의 동기화 된보기를 유지하기 위해 캐시 추상화 (또는 캐시 라이브러리)를 기대할 수 없습니다. findAll은 아무런 인수가없는 키에 해당하는 항목을 반환합니다 (기본값은 new SimpleKey).