Я использую версию Spring Boot 2.0.4.RELEASE с включенным кэшем только с поставщиком кэша по умолчанию. Внешний поставщик кэша не используется.
Я запланировал запуск пакета в определенное время каждый день.Во время его выполнения некоторые вызовы методов, которые включают доступ к данным, кэшируются и работают нормально.
Теперь я хочу освободить все кэшированные элементы перед следующим запуском функции в назначенное время.
IЯ не могу реализовать эту функцию.Можете ли вы привести меня к нескольким идеям или способам их реализации.
Это то, что я пытаюсь реализовать.У меня есть класс JobExecutionListener, помеченный как @Configuration.Я использую метод afterJob для очистки всех кешей.
@Configuration
@JobScope
public class JobTwoExecutionListener implements JobExecutionListener {
private static final Logger logger = LoggerFactory.getLogger(JobTwoExecutionListener.class);
@Autowired
private CacheManager cacheManager;
@Override
public void beforeJob(JobExecution jobExecution) {
final String methodName = "beforeJob() : ";
logger.info(methodName + "called");
if(cacheManager == null) return;
logger.info(methodName + "CacheManager FOUND. Listing all the caches
before Job Run");
for(String name : cacheManager.getCacheNames()){
logger.info(methodName + "CACHE_NAME BEFORE JOB " + name);
}
}
@Override
public void afterJob(JobExecution jobExecution) {
final String methodName = "afterJob() : ";
logger.info(methodName + "called");
performCacheCleanup();
}
private void performCacheCleanup(){
final String methodName = "performCacheCleanup() : ";
logger.info(methodName + "called");
if(cacheManager == null){
logger.info(methodName + "CacheManager NOT FOUND");
return;
}
logger.info(methodName + "CacheManager FOUND. Listing & clearing all the caches after Job Run");
for(String name : cacheManager.getCacheNames()){
if(name == null) continue;
logger.info(methodName + "CLEARING CACHE " + name + " AFTER JOB");
Cache cache = cacheManager.getCache(name);
if(cache != null) cache.clear();
}
}
}