J'utilise Spring3.1 dans Standalone env. Je cache mon entrée à l'aide de @cachable Annotation.
Parfois, j'ai besoin de itérer sur la liste de mise en cache afin d'obtenir donc j'ai géré Pour récupérer la liste mise en cache, mais comment pourrais-je itérair sur ses éléments. P> <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"
p:cache-manager-ref="ehcache" />
<bean id="ehcache"
class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
p:config-location="classpath:ehcache.xml" />
5 Réponses :
CACHEMANAGER.GETCACHACHACHE () renvoie un Net.sf.ehcache.cache, qui a une méthode getKeys () qui renvoie une liste de clés de cache que vous pouvez itération. Pour récupérer l'objet réel qui a été stocké (par opposition au Net.Sf.eHCache.Element enveloppé), utilisez l'élément.getObjectValue ().
EDIT: Selon le printemps Il ne ressemble pas à ce qu'ils supporteront jamais la cache.getKeys () , Donc, vous devrez vous lancer vers le fournisseur sous-jacent. P>
quelque chose comme ceci: p>
Mais je n'ai pas de méthode cache.getkeys (). J'utilise org.springframework.cache.cache
Avez-vous trouvé une solution? Comment iTerez-vous sur le cache Infinispan. J'ai besoin de clés.
Avez-vous été lancé au fournisseur sous-jacent?
Cette réponse suppose que l'objet de type cache hérité a une méthode getkeys. Ce n'est pas toujours vrai et une telle cache, comme mention ci-dessus, l'org.springframework.cache.cache n'inclut pas cela.
La méthode ci-dessous donnera un ensemble de touches d'objets mis en cache, mais si vous ajoutez votre cache avec des touches, il est facile de récupérer (si vous ajoutez directement une liste directement des objets au cache, cela ne fonctionnera pas). Aussi, j'ai utilisé Guavacache dans le responsable du cache comme ci-dessous. P>
public Set<Object> getAllCachedUserLabKeys() { Set<Object> keys = null; try { GuavaCache cache = (GuavaCache) cacheManager.getCache("yourCacheName"); if (cache != null) { ConcurrentMap<Object, Object> cachedMap = cache.getNativeCache().asMap(); keys = cachedMap.keySet(); } } catch (Exception e) { LOGGER.error("Unknown exception occured while fetchting all cached User Labs..!", e); } return keys; }
Une autre solution, pars.springframework.cache.cache à javax.cache.cache à l'aide de la méthode getnativecache () et utilisez java itérateur comme javax.cache.cache s'étend déjà iTrable>.
Pour plus de détails Lire javax.cache.cache javadoc < / p>
J'utilise ceci
premier point final vous dira que les caches que vous avez P>
second Endpoint vous donneront toutes les entrées d'un cache spécifique (avec cartographie sécurisée) P>
troisième EndPoint vous donnera toutes les entrées de tous vos caches (avec mappage sûr) p>
var cache = cacheManager.getCache("CACHE_NAME"); var nativeCache = (ConcurrentHashMap<?, ?>) cache.getNativeCache(); for (var entry: nativeCache.entrySet()){ // Access entry key and value entry.getKey() entry.getValue() }