【问题标题】:How do I get a list of cache names in Ehcache 3如何在 Ehcache 3 中获取缓存名称列表
【发布时间】:2019-04-03 09:07:43
【问题描述】:

Ehcache 2我用过

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

但在 Ehcache 3 中虽然我有一个 CacheManager,但 getCacheNames() 方法不存在。

【问题讨论】:

    标签: java ehcache ehcache-3


    【解决方案1】:

    确实如此。它不存在。您有以下解决方案:

    1. 进行严格的反射以访问EhCacheManager.caches
    2. 使用 JSR-107 CacheManager.getCacheNames

    【讨论】:

    • 所以 2. 将是明智的解决方案
    • 但我不明白为什么它在 Ehache 3 中被删除,如果它在 2 中。
    • 因为该方法并未真正涵盖用例,并且鼓励使用缓存管理器和缓存的不良做法。如果您有有效的用例,我建议您在用户邮件列表上开始对话。
    • 好吧(看似)有效的用例是检查我们当前配置了哪些缓存,看起来并不那么疯狂
    • 如果它这么差,为什么要包含在 JSR-107 中?
    【解决方案2】:

    按名称列出所有缓存的唯一有效用例是用于监控目的。 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);
    }
    

    【讨论】:

    • 谢谢,但我不明白为什么按名称获取缓存是不好的做法,你是什么意思。
    • 按名称获取缓存是不错的做法。将缓存的名称用于任何其他目的。
    • Ludovic,什么版本的jar文件提供DefaultManagementRegistryService和Capability?我有 ehcache 3.9 和 hibernate 5.6.2.Final(.jar 和源代码),没有看到对这些类的任何引用。
    猜你喜欢
    • 2022-08-21
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多