Ho un chicco di primavera annotato con @Cacheable
annotazioni definito in questo modoCome disattivare temporaneamente la cache per la cache primavera
@Service
public class MyCacheableBeanImpl implements MyCacheableBean {
@Override
@Cacheable(value = "cachedData")
public List<Data> getData() { ... }
}
Ho bisogno di questo classe per essere in grado di disabilitare la cache e lavorare solo con i dati di fonte originale. Questo dovrebbe accadere sulla base di qualche evento dall'esterno. Ecco il mio approccio a questo:
@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;
}
}
La mia preoccupazione è che il livello di "magia" in questo approccio è molto alto. Non sono nemmeno sicuro di come posso verificare che funzioni (sulla base della documentazione di primavera dovrebbe funzionare, ma come esserne certi). Lo sto facendo bene? Se ho torto, allora come farlo bene?
vedere qui: [ spring-boot-how-to-disable-cachable-during-development] (http://stackoverflow.com/questions/35917159/spring-boot-how-to-disable-cachable-during-development) –
@ StefanIsele-prefabbricati .com attiva/disattiva la memorizzazione nella cache solo sui contesti tartaro. Il comportamento che voglio ottenere è che la memorizzazione nella cache possa essere disabilitata in qualsiasi momento in base a qualche evento esterno. – SimY4