mam fasola wiosna opatrzone adnotacjami @Cacheable
zdefiniowane jak takJak tymczasowo wyłączyć buforowanie Spring cache
@Service
public class MyCacheableBeanImpl implements MyCacheableBean {
@Override
@Cacheable(value = "cachedData")
public List<Data> getData() { ... }
}
muszę tej klasy będzie w stanie wyłączyć buforowanie i pracuje tylko z danymi z oryginalnego źródła. To powinno się zdarzyć na podstawie jakiegoś zdarzenia z zewnątrz. Oto moje podejście do tego:
@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;
}
}
Moim problemem jest to, że poziom „magii” w tym podejściu jest bardzo wysoka. Nie jestem nawet pewien, czy mogę przetestować, czy to działa (na podstawie wiosennej dokumentacji to powinno działać, ale jak się upewnić). Czy robię to dobrze? Jeśli się mylę, to jak to naprawić?
zobaczyć tutaj: [ spring-boot-how-to-disable-cachable-in-development] (http://stackoverflow.com/questions/35917159/spring-boot-how-to-disable-placeable-during- development) –
@ StefanIsele-prefabware .com to tylko aktywuje/dezaktywuje buforowanie w kontekście s tart się. Zachowanie, które chcę osiągnąć, polega na tym, że buforowanie może być w dowolnym momencie wyłączone na podstawie zdarzenia zewnętrznego. – SimY4