После любой crud операции с кэшом получаю неактуальные данные при попытке вернуть List всех сущностей(метод getAllProxyConfigurations). Почему это может происходить и как это исправить?
При чем другие методы отображают актуальную информацию
@Cacheable("configuration")
public List<Configuration> getAllProxyConfigurations() {
return repository.getAllConfigurations();
}
@Cacheable(value = "configuration", key = "#root.target.getConfigurationById(#id).serverId")
public Configuration getConfigurationById(Long id) {
...
return configuration;
}
@CachePut(value = "configuration", key = "#configuration.serverId", condition = "#result.id != null")
public Configuration addOrUpdateConfiguration(Configuration configuration) {
return configuration;
}
@Cacheable(value = "configuration", key = "#serverId")
public Configuration getConfigurationByServerId(String serverId) {...
return configuration;
}
@CacheEvict(value = "configuration", key = "#root.target.getConfigurationById(#id).serverId")
public void deleteConfigurationById(Long id) {
...
}
На момент создания вопроса - не понимал внутренних процессов кэширования. В spring.cache лежит лист из мап, мапы- это кэши,которые называем в параметрах аннотаций, например: @Cacheable(value/name/cacheNames="cache_name") Я хотел ложить в кэш возвращенный лист и работать с эллементами данного листа. Но это в корне не правильно, так как (в моем случае) в мэпу, в одну ячейку ложился бы весь лист лист из эллементов, а в остальные ячейки (из других методов) эллементы, ключами которых выступали бы значения serverId и id. То есть обращение происходило к совершенно разным эллементам.
Поэтму, было принято решение сделать неколько кэшей: для всех эллементов "config_all", для единичных "config_serverId" и "config_id"(так как использовать запись, вроде такой не логично: "#root.target.getConfigurationById(#id).serverId" по причине того, что в любом случае вызывался метод getConfigurationById).
Итог: Убрал аннотации @CachePut на обновление- заменил на @Cacheable. Это позволяет держать в кэше актуальные данные без головной боли
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Пишу программу с использованием javafx, в ней нужно вводить данные в одно поле TextField, после подсчёта выводить в другоеВ консоли это бы выглядело...
Как сделать так, чтобы при нажатии batton, программа использовала данные, введённые в TextField?
Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме