2017-07-21 37 views
5

Według link, najprostszej konfiguracji używać pamięci podręcznej w bagażniku wiosennym korzysta CacheManager (an cache Mapa będzie zainicjowany w tej klasie):Wiosna bagażnika cache Nie cache może być rozwiązany za 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; 
    } 
} 

aw serviceImpl.java:

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

Ale to rzuca:

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. 

EDYCJA: jeśli przypisać cacheName w cacheManager i używać go w zalecanej metody, wyjątek zniknął. Ale wszystkie metody w komponencie bean byłyby buforowane, a ja przypisałem tylko jedną metodę - @Cacheable.

+1

Czy próbowałeś coś takiego: @Cacheable (cacheNames = "cache-name") na swojej metody repozytorium? – Afridi

+0

@Afridi tak, próbowałem, a to działa. Ale nie dynamiczny, który również powinien działać. Poza tym, używając cacheName, chociaż wyjątek zniknął, ale powoduje, że cała klasa jest buforowana, a nie tylko metoda. – Tiina

Odpowiedz

1

Używam Ehcache i miałem ten sam problem, ponieważ miałem dwie różne nazwy dla pamięci podręcznej i Cacheable.

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>