<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>3.10.1</version>
</dependency>
import org.ehcache.CacheManager;
import org.ehcache.config.Configuration;
import org.ehcache.xml.XmlConfiguration;
public class CacheManagerInitializer {
public CacheManager initializeCacheManager() {
Configuration xmlConfig = new XmlConfiguration(getClass().getResource("/ehcache.xml"));
CacheManager cacheManager = CacheManagerBuilder.newCacheManager(xmlConfig);
cacheManager.init();
return cacheManager;
}
}
import org.ehcache.Cache;
import org.ehcache.CacheManager;
import org.ehcache.config.builders.CacheConfigurationBuilder;
import org.ehcache.config.builders.ResourcePoolsBuilder;
import org.ehcache.expiry.Duration;
import org.ehcache.expiry.Expirations;
public class DataCache implements Cache<String, Object> {
private static final Duration CACHE_EXPIRATION = Duration.ofMinutes(30);
private final Cache<String, Object> cache;
public DataCache(CacheManager cacheManager) {
cache = cacheManager.createCache("dataCache",
CacheConfigurationBuilder.newCacheConfigurationBuilder(String.class, Object.class,
ResourcePoolsBuilder.heap(100))
.withExpiry(Expirations.timeToLiveExpiration(CACHE_EXPIRATION))
.build());
}
@Override
public Object get(String key) throws CacheException {
return cache.get(key);
}
@Override
public void put(String key, Object value) throws CacheException {
cache.put(key, value);
}
}
public class Application {
private final Cache<String, Object> dataCache;
public Application(CacheManager cacheManager) {
dataCache = new DataCache(cacheManager);
}
public Object getData(String key) {
Object data = dataCache.get(key);
if (data == null) {
data = fetchDataFromDataSource(key);
dataCache.put(key, data);
}
return data;
}
}