के लिए हल किया जा सकता है 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
असाइन किया था।
क्या आपने इस तरह कुछ करने की कोशिश की: @Cacheable (cacheNames = "cache-name") आपके भंडार विधि पर? – Afridi
@Afridi हाँ मैंने कोशिश की, और वह काम करता है। लेकिन गतिशील नहीं, जो भी काम करना चाहिए। इसके अलावा, कैशनाम का उपयोग करते हुए हालांकि अपवाद समाप्त हो गया है, लेकिन यह पूरी कक्षा को कैश करने योग्य बनाता है, न केवल विधि। – Tiina