如何获取Ehcache 3中的缓存名称列表

时间:2019-04-03 09:07:43

标签: java ehcache ehcache-3

在我使用的 Ehcache 2

Cache<String, Release> releaseCache = cacheManager.getCacheNames();

但是在 Ehcache 3 中,尽管我有CacheManager,但getCacheNames()方法不存在。

2 个答案:

答案 0 :(得分:0)

是的。它不存在。您有以下解决方案:

  1. 进行反思,以访问EhCacheManager.caches
  2. 使用JSR-107 CacheManager.getCacheNames

答案 1 :(得分:0)

按名称列出所有缓存的唯一有效用例是何时出于监视目的。 Ehcache 2通过将高速缓存与其名称紧密结合来鼓励不良做法,而Ehcache 3完全可以避免这种情况。

如果您的用例是出于监视原因列出缓存,则应查看尚未得到正式支持但仍在运行的监视API。这里有一个示例:https://github.com/anthonydahanne/ehcache3-samples/blob/management-sample/management-sample/src/main/java/org/ehcache/management/sample/EhcacheWithMonitoring.java

这是一个简单的示例,说明如何使用它来查找现有的缓存名称:

DefaultManagementRegistryService managementRegistry = new DefaultManagementRegistryService();

CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder()
    .using(managementRegistry)
    .withCache(...)
    .withCache(...)
    .build(true);

Capability settingsCapability = managementRegistry.getCapabilities().stream().filter(c -> "SettingsCapability".equals(c.getName())).findFirst().orElseThrow(() -> new RuntimeException("No SettingsCapability"));
for (Settings descriptor : settingsCapability.getDescriptors(Settings.class)) {
  String cacheName = descriptor.getString("cacheName");
  if (cacheName == null) {
    continue; // not a cache
  }
  System.out.println("cache : " + cacheName);
}