2017-07-21 18 views
5

Theo link, cấu hình đơn giản nhất để sử dụng bộ nhớ cache trong khởi động mùa xuân đang sử dụng CacheManager (một Bản đồ bộ nhớ cache sẽ được khởi tạo trong lớp này):bộ nhớ cache khởi động mùa xuân Không nhớ cache có thể được giải quyết cho Builder

@Configuration 
@EnableCaching 
public class CacheService extends CachingConfigurerSupport { 
    @Bean 
    public CacheManager concurrentMapCacheManager() { 
     ConcurrentMapCacheManager cmcm = new ConcurrentMapCacheManager(); 
     return cmcm; 
    } 

    @Bean 
    @Primary 
    public CacheManager guavaCacheManager() { 
     GuavaCacheManager gcm = new GuavaCacheManager(); 
     return gcm; 
    } 
} 

và trong serviceImpl.java:

@Cacheable(cacheManager="guavaCacheManager") 
@Override 
public List<RoleVO> getDataForCreateNewOperator() { 
    ... 
} 

Nhưng nó ném:

java.lang.IllegalStateException: No cache could be resolved for 'Builder[public java.util.List getDataForCreateNewOperator()] caches=[] | key='' | keyGenerator='' | cacheManager='guavaCacheManager' | cacheResolver='' | condition='' | unless='' | sync='false'' using resolver '[email protected]10'. At least one cache should be provided per cache operation. 

EDIT: nếu tôi gán một cacheName trong cacheManager, và sử dụng nó trong phương thức được khuyên, ngoại lệ đã biến mất. Nhưng tất cả các phương pháp trong bean sẽ được lưu trữ trong khi tôi chỉ gán @Cacheable trên một phương thức.

+1

Bạn đã thử một cái gì đó như thế này: @Cacheable (cacheNames = "cache-name") trên phương pháp lưu trữ của bạn? – Afridi

+0

@Afridi vâng tôi đã thử, và nó hoạt động. Nhưng không phải năng động, mà cũng nên làm việc quá. Bên cạnh đó, sử dụng cacheName mặc dù ngoại lệ đã biến mất, nhưng nó làm cho toàn bộ lớp có thể lưu vào bộ nhớ cache, không chỉ là phương thức. – Tiina

Trả lời

1

Tôi đang sử dụng Ehcache và tôi gặp vấn đề tương tự vì tôi có hai tên khác nhau cho bộ nhớ cache và Cacheable có tên là .

Please make you use same name for cache and Cacheable. 

@Cacheable("codetable") 

<cache name="codetable" 
     maxEntriesLocalHeap="100" 
     maxEntriesLocalDisk="1000" 
     eternal="false" 
     timeToIdleSeconds="300" 
     timeToLiveSeconds="600" 
     memoryStoreEvictionPolicy="LFU" 
     transactionalMode="off"> 
     <persistence strategy="localTempSwap" /> 
    </cache> 
Các vấn đề liên quan