2014-10-21 8 views
0

저는 Spring의 캐싱 기능을 사용하고 있습니다. 나는 다음과 같은 메서드를 호출 할 때, 나는 배열 receiptObject.resolverIds의 모든 값에 대한 캐시를 퇴거 할 :스프링 EL의 배열에 대한 내용 사용 EL

여기
@Override 
@Caching(evict = { 
     @CacheEvict(value = "assignedFeedbacks", key = "#receiptObject.resolverIds[0]"), 
     @CacheEvict(value = "newFeedbacks", key = "#receiptObject.feedbackObject.serviceId") }) 
public void addReceipt(ReceiptObject receiptObject) throws Exception { 
    feedbackDao.insertReceipt(receiptObject); 
} 

내가 첫 번째 요소를 사용했다하지만 난 배열의 모든 요소에 대해이 작업을 일반화 할 . 어떻게해야합니까?

답변

1

난 당신이 @Cacheable 방법과 같은 곳이 추측 :

@Cacheable(value = "assignedFeedbacks") 
public void getReceipt(Object receiptId) throws Exception { 

@Caching 이후 주석을 한 번에 오직 하나의 캐시 항목으로 거래를 얻을 수 SpEL을 작동 할 수있는 방법을 살펴 할 이유가 없다 key은 단일 객체 여야하기 때문에 배열을 사용합니다.

@Autowired 
private CacheManager cacheManager; 

public void addReceipt(ReceiptObject receiptObject) throws Exception { 
    feedbackDao.insertReceipt(receiptObject); 
    Cache cache = cacheManager.getCache("assignedFeedbacks"); 
    for (Object receiptId: receiptObject.getResolverIds()) { 
     cache.evict(receiptId); 
    } 
} 
:

내가 볼 수있는 유일한 방법은 직접 캐시 추상화 사용을 기반으로