Le cache de Spring ne fonctionne pas lorsque l'on appelle une méthode mise en cache depuis une autre méthode du même bean.
Voici un exemple pour expliquer mon problème de manière claire.
Configuration :
<cache:annotation-driven cache-manager="myCacheManager" />
<bean id="myCacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
<property name="cacheManager" ref="myCache" />
</bean>
<!-- Ehcache library setup -->
<bean id="myCache"
class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:shared="true">
<property name="configLocation" value="classpath:ehcache.xml"></property>
</bean>
<cache name="employeeData" maxElementsInMemory="100"/>
Service en cachette :
@Named("aService")
public class AService {
@Cacheable("employeeData")
public List<EmployeeData> getEmployeeData(Date date){
..println("Cache is not being used");
...
}
public List<EmployeeEnrichedData> getEmployeeEnrichedData(Date date){
List<EmployeeData> employeeData = getEmployeeData(date);
...
}
}
Résultat :
aService.getEmployeeData(someDate);
output: Cache is not being used
aService.getEmployeeData(someDate);
output:
aService.getEmployeeEnrichedData(someDate);
output: Cache is not being used
El getEmployeeData
l'appel de la méthode utilise le cache employeeData
dans le deuxième appel comme prévu. Mais lorsque le getEmployeeData
est appelée dans le cadre de la méthode AService
(en getEmployeeEnrichedData
), le cache n'est pas utilisé.
Est-ce que c'est comme ça que fonctionne le cache de Spring ou est-ce que je rate quelque chose ?