如何在 Spring 引导应用程序中为 ehCache 配置 Dropwizard/CodaHale 指标?
How do I configure Dropwizard/CodaHale metrics for ehCache in Spring Boot application?
这是我的问题。我的 Spring 引导应用程序使用 Hibernate/JPA 和 ehCache 进行二级缓存。我想用 Dropwizard/Coda-Hale 指标检测 ehCache,但我不太确定该怎么做。如果我手动创建 Cache 实例,那就很简单了。您只需使用如图所示的装饰器 here。但由于它是 Spring/Hibernate,我无法控制缓存。任何想法我将如何设置它?
好吧,我相信我终于弄明白了。事实证明,为返回 Spring 类 ehCacheCacheManager 添加 Spring JavaConfig 仍可用于访问底层 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;
}
这是我的问题。我的 Spring 引导应用程序使用 Hibernate/JPA 和 ehCache 进行二级缓存。我想用 Dropwizard/Coda-Hale 指标检测 ehCache,但我不太确定该怎么做。如果我手动创建 Cache 实例,那就很简单了。您只需使用如图所示的装饰器 here。但由于它是 Spring/Hibernate,我无法控制缓存。任何想法我将如何设置它?
好吧,我相信我终于弄明白了。事实证明,为返回 Spring 类 ehCacheCacheManager 添加 Spring JavaConfig 仍可用于访问底层 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;
}