如何在 Ehcache 3 中获取缓存名称列表
How do I get a list of cache names in Ehcache 3
在Ehcache 2我用
Cache<String, Release> releaseCache = cacheManager.getCacheNames();
但是在 Ehcache 3 中,虽然我有 CacheManager,但 getCacheNames() 方法不存在。
确实如此。它不存在。您有这些解决方案:
- 进行严格的反思以访问
EhCacheManager.caches
- 使用 JSR-107
CacheManager.getCacheNames
按名称列出所有缓存的唯一有效用例是用于监视目的。 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);
}
在Ehcache 2我用
Cache<String, Release> releaseCache = cacheManager.getCacheNames();
但是在 Ehcache 3 中,虽然我有 CacheManager,但 getCacheNames() 方法不存在。
确实如此。它不存在。您有这些解决方案:
- 进行严格的反思以访问
EhCacheManager.caches
- 使用 JSR-107
CacheManager.getCacheNames
按名称列出所有缓存的唯一有效用例是用于监视目的。 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);
}