java - 在 EhCache 中,是否可以在所有缓存上默认启用 Statistics?

标签 java monitoring ehcache

我目前正在为一个应用程序编写一些监控代码,该应用程序由许多不同的小模块组成,其中许多模块使用了 EhCache。我的目标是从应用程序中的每个缓存中收集有关命中率、缓存内容等的统计信息。但是,我在实现此功能时遇到了一些麻烦,因为启用统计信息是 EhCache 中的一个可选功能。我正在寻找一种以自动方式为所有缓存启用统计信息的方法,以便维护不同模块的开发人员不必总是记住启用它们。

我能在 JavaDocs 中找到最接近的内容(但仍然不起作用):

cacheManager.getDefaultCacheConfiguration().setStatisticsEnabled(true);

该方法调用启用默认缓存的统计信息,而其余缓存不会受到影响。

我的另一个想法是包装 CacheManager 以便拦截创建缓存的调用并自动选择它们加入统计信息。不幸的是,CacheManager 是一个类而不是一个接口(interface),所以这样的解决方案需要大量代码并且很脆弱——每次随着 EhCache 的发展添加/删除公共(public)方法,我都必须更新我的子类。

有没有人遇到过类似的问题?如果是这样,您是如何解决的?非常感谢...

最佳答案

在某些时候,一旦创建了缓存,您就可以执行以下操作:

for (CacheManager manager : CacheManager.ALL_CACHE_MANAGERS) {
  for (String name : manager.getCacheNames()) {
    manager.getCache(name).getCacheConfiguration().setStatistics(true);
  }
}

当然你会想要添加错误检查。

如果您有动态创建的缓存,您可以使用缓存管理器事件监听器(参见 the documentation )。基本上,您必须通过扩展 CacheManagerEventListenerFactory 创建一个工厂,然后通过实现 CacheManagerEventListener 创建实际的监听器。监听器可能如下所示:

public class StatisticsEnabledCacheManagerListener implements CacheManagerEventListener {
  public void notifyCacheAdded(String cacheName) {
    CacheManager.getInstance().getCache(cacheName).getCacheConfiguration().setStatistics(true);
  }

  public void notifyCacheRemoved(String cacheName) {}
}

要向 Ehcache 注册工厂,请将其添加到 ehcache.xml 中:

<cacheManagerEventListenerFactory class="com.example.cache.MyListenerFactory" properties=""/>

请务必注意,如果您将默认缓存设置为启用统计信息,那么您动态创建的任何缓存都将默认启用统计信息,除非创建缓存的任何内容专门将其关闭。

关于java - 在 EhCache 中,是否可以在所有缓存上默认启用 Statistics?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13054435/

相关文章:

snowflake-cloud-data-platform - Snowflake Snowpipe - 电子邮件警报机制

java - @Cacheable 是否知道 'Thundering Herd' 问题?

ehcache - ehcache 3.4 中的磁盘持久缓存正在使用(泄漏?)直接内存

java - Spring应用程序启动时如何使缓存依赖于其他缓存

java - 推断aspectj方法中参数的类型

java - 无法在 ubuntu 16.0.4 TLS 上启动 tomcat 8

java - GAE 上传文件 POST 请求(URLConnection) - 错误 : the uploaded file was only partially uploaded

java - spring mvc 与 jpa 中的 Multi-Tenancy 架构

performance - 生产应用程序的监控和警报

php - 监控过程性能影响?