Tôi có một đậu mùa xuân chú thích với @Cacheable
chú thích định nghĩa như vậyLàm thế nào để tạm thời tắt bộ nhớ đệm cho mùa xuân nhớ cache
@Service
public class MyCacheableBeanImpl implements MyCacheableBean {
@Override
@Cacheable(value = "cachedData")
public List<Data> getData() { ... }
}
Tôi cần lớp này có khả năng vô hiệu hóa bộ nhớ đệm và chỉ làm việc với dữ liệu từ nguồn gốc. Điều này sẽ xảy ra dựa trên một số sự kiện từ bên ngoài. Đây là cách tiếp cận của tôi cho điều này:
@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;
}
}
Mối quan tâm của tôi là mức "ma thuật" trong phương pháp này rất cao. Tôi thậm chí không chắc chắn làm thế nào tôi có thể kiểm tra rằng điều này sẽ làm việc (dựa trên tài liệu mùa xuân này nên làm việc nhưng làm thế nào để chắc chắn). Tôi làm đúng không? Nếu tôi sai thì làm thế nào để làm cho nó đúng?
thấy ở đây: [ spring-boot-how-to-disable-cachable-trong khi phát triển] (http://stackoverflow.com/questions/35917159/spring-boot-how-to-disable-cachable-during-development) –
@ StefanIsele-prefabware .com này sẽ chỉ kích hoạt/hủy kích hoạt bộ nhớ đệm trên ngữ cảnh tart lên. Các hành vi tôi muốn đạt được là bộ nhớ đệm có thể bị vô hiệu hóa bất cứ lúc nào dựa trên một số sự kiện bên ngoài. – SimY4