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' getEmployeeData
appel de méthode utilise le cache employeeData
dans le deuxième appel comme prévu. Mais lorsque la getEmployeeData
méthode est appelée dans la AService
classe (in getEmployeeEnrichedData
), Cache n'est pas utilisé.
Est-ce ainsi que fonctionne Spring Cache ou est-ce que je manque quelque chose?
someDate
param?