Я использую версию Spring Boot 2.0.4.RELEASE с включенным кешем и только с поставщиком кеша по умолчанию. Внешний поставщик кеша не используется.
Я запланировал партию, которая будет запускаться каждый день в определенное время. Во время его запуска определенные вызовы методов, которые включают доступ к данным, кэшируются, и он отлично работает.
Теперь я хочу освободить все кешированные элементы до следующего запуска функции в запланированное время.
Я не могу реализовать эту функцию. Можете ли вы подсказать мне несколько идей или способов их реализации.
Это то, что я пытаюсь реализовать. У меня есть класс 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();
}
}
}