On application (spring boot service) startup, need to clear the Redis cache.
Redis is running in a different docker container with own volume mapping. Since it retains the old cache, the application picks the data from Redis cache instead of Database even after the application restarts
@EventListener
for ContextRefreshedEvent
and it is never getting called. @PostConstruct
in ApplicationMain class, but it doesn't clear the cache.Tried using @CacheEvict(allEntries = true)
, but still no luck
@Component public class ApplicationStartUp {
@Autowired
private CacheManager cacheManager;
@EventListener()
public void onApplicationEvent(ContextStartedEvent event) {
cacheManager.getCacheNames()
.parallelStream()
.forEach(n -> cacheManager.getCache(n).clear());
}
}
I was successfully able to clear the cache with ApplicationReadyEvent
. As the CacheManager
bean is available by the time, the cache is getting cleared properly on startup
@Autowired
private CacheManager cacheManager;
@EventListener
public void onApplicationEvent(ApplicationReadyEvent event) {
cacheManager.getCacheNames()
.parallelStream()
.forEach(n -> cacheManager.getCache(n).clear());
}