I have a service with next methods:
public Optional<Test> getTestWithId100() {
return get(100);
}
@Cacheable(value = "test", key = "'1'")
public Optional<Test> get(long id) {
log.error("not from cache");
return testRepository.findOneById(id);
}
I call method getTestWithId100 from controller, but it only get fresh value.
@Slf4j
@Configuration
@EnableCaching
@AutoConfigureAfter(value = { MetricsConfiguration.class, DatabaseConfiguration.class })
public class CacheConfiguration {
@PersistenceContext
private EntityManager entityManager;
private final MetricRegistry metricRegistry;
private net.sf.ehcache.CacheManager cacheManager;
@Inject
public CacheConfiguration(MetricRegistry metricRegistry) {
this.metricRegistry = metricRegistry;
}
@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(Properties properties) {
log.debug("Starting Ehcache");
cacheManager = net.sf.ehcache.CacheManager.create();
cacheManager.getConfiguration().setMaxBytesLocalHeap(properties.getCache().getEhcache().getMaxBytesLocalHeap());
log.debug("Registering Ehcache Metrics gauges");
entityManager.getMetamodel().getEntities().forEach(entity -> {
String name = entity.getName();
if (name == null || entity.getJavaType() != null)
name = entity.getJavaType().getName();
Assert.notNull(name, "entity cannot exist without a identifier");
net.sf.ehcache.Cache cache = cacheManager.getCache(name);
if (cache != null)
cacheManager.replaceCacheWithDecoratedCache(cache, InstrumentedEhcache.instrument(metricRegistry, cache));
});
EhCacheCacheManager ehCacheManager = new EhCacheCacheManager();
ehCacheManager.setCacheManager(cacheManager);
return ehCacheManager;
}
}
part of ehcache.xml:
<cache name="test" eternal="true"/>
Why it doesn't work? I tried with different keys but without success.