के लिए कैशिंग निष्क्रिय करने के लिए मैं एक वसंत सेम @Cacheable
एनोटेशन के साथ एनोटेट तोको अस्थायी रूप से वसंत कैश
@Service
public class MyCacheableBeanImpl implements MyCacheableBean {
@Override
@Cacheable(value = "cachedData")
public List<Data> getData() { ... }
}
तरह परिभाषित मैं इस वर्ग की जरूरत है कैशिंग को अक्षम और मूल स्रोत से डेटा के साथ ही काम कर रहा करने में सक्षम होना चाहिए। यह बाहर से कुछ घटना के आधार पर होना चाहिए। यहां मेरा दृष्टिकोण है:
@Service
public class MyCacheableBeanImpl implements MyCacheableBean, ApplicationListener<CacheSwitchEvent> {
//Field with public getter to use it in Cacheable condition expression
private boolean cacheEnabled = true;
@Override
@Cacheable(value = "cachedData", condition = "#root.target.cacheEnabled") //exression to check whether we want to use cache or not
public List<Data> getData() { ... }
@Override
public void onApplicationEvent(CacheSwitchEvent event) {
// Updating field from application event. Very schematically just to give you the idea
this.cacheEnabled = event.isCacheEnabled();
}
public boolean isCacheEnabled() {
return cacheEnabled;
}
}
मेरी चिंता यह है कि इस दृष्टिकोण में "जादू" का स्तर बहुत अधिक है। मुझे यह भी यकीन नहीं है कि मैं कैसे परीक्षण कर सकता हूं कि यह काम करेगा (वसंत दस्तावेज के आधार पर यह काम करना चाहिए लेकिन कैसे सुनिश्चित किया जाना चाहिए)। क्या मैं यह ठीक कर रहा हूँ? अगर मैं गलत हूं तो इसे सही कैसे बनाया जाए?
यहाँ देखें: [ वसंत-बूट-कैसे-अक्षम-कैच करने योग्य-विकास के दौरान] (http://stackoverflow.com/questions/35917159/spring-boot-how-to-disable-cachable-during-development) –
@ स्टीफनइसेले-प्रीफैबवेयर .com यह केवल संदर्भों पर कैशिंग को सक्रिय/निष्क्रिय कर देगा टार्ट अप जिस व्यवहार को मैं प्राप्त करना चाहता हूं वह यह है कि कुछ बाहरी घटनाओं के आधार पर कैशिंग को किसी भी समय अक्षम किया जा सकता है। – SimY4