package org.kalipo.config; import com.codahale.metrics.MetricRegistry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.ehcache.EhCacheCacheManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import javax.annotation.PreDestroy; import javax.inject.Inject; import java.util.SortedSet; @Configuration @EnableCaching @AutoConfigureAfter(value = {MetricsConfiguration.class, DatabaseConfiguration.class}) public class CacheConfiguration { private final Logger log = LoggerFactory.getLogger(CacheConfiguration.class); @Inject private Environment env; @Inject private MetricRegistry metricRegistry; private net.sf.ehcache.CacheManager cacheManager; @PreDestroy public void destroy() { log.info("Remove Cache Manager metrics"); SortedSet<String> names = metricRegistry.getNames(); names.forEach(metricRegistry::remove); log.info("Closing Cache Manager"); cacheManager.shutdown(); } @Bean public CacheManager cacheManager() { log.debug("Starting Ehcache"); cacheManager = net.sf.ehcache.CacheManager.create(); cacheManager.getConfiguration().setMaxBytesLocalHeap(env.getProperty("cache.ehcache.maxBytesLocalHeap", String.class, "16M")); log.debug("Registering Ehcache Metrics gauges"); EhCacheCacheManager ehCacheManager = new EhCacheCacheManager(); ehCacheManager.setCacheManager(cacheManager); return ehCacheManager; } }