2016-07-26 49 views
1

Ich habe eine Methode in Userservice bekam:Ehcache mit Frühlings-Cache weist falschen Schlüssel

@Cacheable(value="user", key="#p0") 
public User find(String name) { 
    return userRepository.findOneByName(name); 
} 

Und es zwischenspeichert. Aber dann versuche ich alle Schlüssel zu bekommen von 'user' Cache:

CacheManager cacheManager = CacheManager.getInstance(); 
cacheManager.getCache("user").getKeys().forEach(o -> log.debug(o.toString())); 

Ausgang:

com.cache.domain.User # 1

Statt zum Beispiel ' John Doe'.

+1

Haben Sie versucht @Cacheable (Wert = "Benutzer", Schlüssel = "# Name")? – Cid54

+0

Ja. Es gibt das gleiche Ergebnis. – Feeco

Antwort

0

Siehe Javadoc von getKeys

Gibt eine Liste aller Elemente im Cache, ob sie abgelaufen sind.

Das ist tatsächlich die Elemente zurück, keine die IDs. Möglicherweise möchten Sie den Code so ändern, dass o in Element umgewandelt und stattdessen getObjectKey() ausgegeben wird.

Sie müssen das Attribut key nicht angeben. Da Sie das einzige Argument Ihrer Methode (name) verwenden möchten, verwendet die Cache-Abstraktion das standardmäßig.