Le cache Spring ne fonctionne pas lors de l'appel d'une méthode mise en cache à partir d'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 mis en cache:
@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
L' getEmployeeDataappel de méthode utilise le cache employeeDatadans le deuxième appel comme prévu. Mais lorsque la getEmployeeDataméthode est appelée dans la AServiceclasse (in getEmployeeEnrichedData), Cache n'est pas utilisé.
Est-ce ainsi que fonctionne Spring Cache ou est-ce que je manque quelque chose?
someDateparam?