2013-01-15 29 views
6

के माध्यम से वसंत विधि कैशिंग अक्षम करें मैंने ehcache और एनोटेशन संचालित कॉन्फ़िगरेशन के साथ वसंत विधि कैशिंग कॉन्फ़िगर किया।बाह्य संपत्ति

मैं हालांकि इसे एप्लिकेशन में उपयोग की जाने वाली कॉन्फ़िगरेशन फ़ाइल से अक्षम करने में सक्षम होना चाहता हूं।

मेरा पहला विचार net.sf.ehcache.CacheManager.CacheManager() पर कॉल करना था, यदि विधि कैशिंग अक्षम है तो कोई तर्क नहीं है। यह अपवाद फेंकता है:

java.lang.IllegalArgumentException: loadCaches must not return an empty Collection 
at org.springframework.util.Assert.notEmpty(Assert.java:268) 
at org.springframework.cache.support.AbstractCacheManager.afterPropertiesSet(AbstractCacheManager.java:49) 

मेरी दूसरी विचार तो यह है कि कैश (maxElementsInMemory 0 आदि) नहीं किया जाता है डिफ़ॉल्ट डेटा के साथ net.sf.ehcache.CacheManager.CacheManager() कॉन्फ़िगर करने के लिए किया गया था। लेकिन फिर कैश अभी भी उपयोग किया जाता है, जो मैं नहीं चाहता हूं।

एक संपत्ति net.sf.ehcache.disabled है लेकिन मैं हाइबरनेट कैशिंग अक्षम नहीं करना चाहता हूं जो ehcache का भी उपयोग करता है।

Q मैं वसंत विधि कैशिंग रखने के लिए सब कुछ कैसे कॉन्फ़िगर कर सकता हूं लेकिन इसे मेरी बाहरी कॉन्फ़िगरेशन फ़ाइल से अक्षम कर सकता हूं? मैं एप्लिकेशन कैंसर को सक्षम/अक्षम करने के लिए एप्लिकेशन-संदर्भ और न ही कोड को संशोधित नहीं करना चाहता हूं। एप्लिकेशन में उपयोग की जाने वाली कॉन्फ़िगरेशन फ़ाइल केवल संशोधित की जा सकती है।

+0

आप एक्सएमएल द्वारा स्प्रिंग कैशिंग फ़ंक्शनटालि को कैसे सक्षम करते हैं? क्या आप वसंत 3.1 का उपयोग करते हैं? – Ralph

+0

मैं एनोटेशन संचालित कैश के साथ वसंत 3.1 का उपयोग करता हूं जैसा कि दस्तावेज़ में बताया गया है http://static.springsource.org/spring/docs/3.1.0.M1/spring-framework-reference/html/cache.html – phury

उत्तर

8

मैं NoOpCacheManager था के लिए क्या देख रहा था:

यह काम करने के लिए मैं एक्सएमएल सेम निर्माण से पर स्विच एक कारखाने

इस प्रकार मैं कुछ किया:

@Bean 
public CacheManager cacheManager() { 
    final CacheManager cacheManager;   
    if (this.methodCacheManager != null) { 
     final EhCacheCacheManager ehCacheCacheManager = new EhCacheCacheManager(); 
     ehCacheCacheManager.setCacheManager(this.methodCacheManager); 
     cacheManager = ehCacheCacheManager; 
    } else { 
     cacheManager = new NoOpCacheManager(); 
    } 

    return cacheManager; 
} 
3

आप सक्षम करने के लिए (या नहीं) एक spring profile उपयोग कर सकते हैं, वसंत कैशिंग समर्थन

<beans profile="withCache"> 
    <cache:annotation-driven /> 
</beans> 
+0

मैंने उस समाधान की कोशिश की लेकिन मैं अपने कैश झंडे को प्रोग्रामेटिक रूप से परीक्षण करने का प्रबंधन नहीं करता हूं और फिर संदर्भ को रीफ्रेश किए बिना कैश प्रोफाइल चालू करता हूं। – phury