У меня есть API, основанный на приложении весенней загрузки, которое кэширует разные методы с разной задержкой,
@Cacheable(value = "findAllByIdType", key="#p0")
List<NomenclatureEntity> findAllByIdType(String type);
@Cacheable(value = "findByIdTypeAndIdKey", key="#p0 + #p1")
NomenclatureEntity findByIdTypeAndIdKey(String type,String key);
Конфигурация кэша:
@Configuration
@ConditionalOnExpression("${cache.enable:true}")
@EnableCaching
@EnableScheduling
public class CacheConfig {
private static final String findByIdTypeAndIdKey = "findByIdTypeAndIdKey";
private static final String findAllByIdType = "findAllByIdType";
private static final Logger LOGGER = LoggerFactory.getLogger(CacheConfig.class);
@Bean
public CacheManager cacheManager() {
ConcurrentMapCacheManager cacheManager = new ConcurrentMapCacheManager(findByIdTypeAndIdKey,findAllByIdType);
return cacheManager;
}
@CacheEvict(allEntries = true, value = {findByIdTypeAndIdKey})
@Scheduled(fixedDelay = 24 * 60 * 60 * 1000 , initialDelay = 500)
public void reportCacheEvict() {
LOGGER.debug("## Flush Data Cache findByIdTypeAndIdKey");
}
@CacheEvict(allEntries = true, value = {findAllByIdType})
@Scheduled(fixedDelay = 24 * 60 * 60 * 1000 , initialDelay = 500)
public void reportCacheEvict2() {
LOGGER.debug("## Flush Data Cache findAllByIdType");
}
}
Приложение работает безупречно, но я сомневаюсь в производительности , это хороший способ (практика) сделать это или есть лучший способ?