Итак, вот моя проблема. Мое приложение Spring Boot использует Hibernate/JPA и ehCache для кэширования 2-го уровня. Я хотел бы оснастить ehCache метриками Dropwizard/Coda-Hale, но я не совсем уверен, как это сделать. Если бы я вручную создавал экземпляры Cache, то это было бы просто. Вы просто используете декоратор, как показано здесь. Но так как это Spring/Hibernate, я не могу контролировать кеши. Любые идеи, как я могу настроить это?
Как настроить показатели Dropwizard/CodaHale для ehCache в приложении Spring Boot?
Ответы (1)
Ну, кажется, я наконец понял это. Оказывается, добавление в Spring JavaConfig для cacheManager, возвращающего классы Spring, ehCacheCacheManager все еще можно использовать для доступа к базовым классам ehCache и их оформления. Вот как я заставил это работать
@Bean
public EhCacheCacheManager ehCacheCacheManager() {
final EhCacheCacheManager ehCacheCacheManager = new EhCacheCacheManager(ehCacheManagerFactoryBean().getObject());
net.sf.ehcache.CacheManager cacheManager = ehCacheCacheManager.getCacheManager();
String[] cacheNames = cacheManager.getCacheNames();
for (String cacheName : cacheNames) {
Cache cache = cacheManager.getCache(cacheName);
cacheManager.replaceCacheWithDecoratedCache(cache, InstrumentedEhcache.instrument(metricRegistry, cache));
}
return ehCacheCacheManager;
}
@Bean
public EhCacheManagerFactoryBean ehCacheManagerFactoryBean() {
EhCacheManagerFactoryBean cacheManagerFactoryBean = new EhCacheManagerFactoryBean();
cacheManagerFactoryBean.setConfigLocation(new ClassPathResource("ehcache.xml"));
cacheManagerFactoryBean.setShared(true);
return cacheManagerFactoryBean;
}
person
Kevin M
schedule
20.02.2015
Да, и всякий раз, когда вы используете кеш в любом месте, вам нужно использовать собственный менеджер EhCache для вызова getEhCache вместо getCache, потому что getEhCache возвращает оформленный кеш, а вызов getCache — нет. См. ehcache. org/apidocs/2.8.4/net/sf/ehcache/
- person Philippe; 10.10.2017