2017-07-21 10 views
5

के लिए हल किया जा सकता है link, वसंत बूट में कैश का उपयोग करने के CacheManager उपयोग कर रहा है सरल विन्यास के अनुसार (एक कैश मानचित्र इस वर्ग में प्रारंभ किया जाएगा):स्प्रिंग बूट कैश कोई कैश बिल्डर

@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; 
    } 
} 

और में serviceImpl.java:

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

लेकिन यह फेंकता है:

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. 

संपादित करें: यदि मैं कैश मैनेजर में कैश नाम निर्दिष्ट करता हूं, और इसे सलाह दी गई विधि में उपयोग करता हूं, तो अपवाद समाप्त हो जाता है। लेकिन बीन में सभी विधियों को कैश किया जाएगा, जबकि मैंने केवल एक विधि पर @Cacheable असाइन किया था।

+1

क्या आपने इस तरह कुछ करने की कोशिश की: @Cacheable (cacheNames = "cache-name") आपके भंडार विधि पर? – Afridi

+0

@Afridi हाँ मैंने कोशिश की, और वह काम करता है। लेकिन गतिशील नहीं, जो भी काम करना चाहिए। इसके अलावा, कैशनाम का उपयोग करते हुए हालांकि अपवाद समाप्त हो गया है, लेकिन यह पूरी कक्षा को कैश करने योग्य बनाता है, न केवल विधि। – Tiina

उत्तर

1

मैं एशैच का उपयोग कर रहा हूं और मेरे पास एक ही समस्या थी क्योंकि मेरे पास कैश और कैशबल के लिए दो अलग-अलग नाम थे।

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> 
संबंधित मुद्दे