java Spring 5@Cacheable不工作,即使侦听器调用在堆栈上
我的缓存注释正在注册,该注释将显示在跟踪日志中:
2019-11-04 23:55:52,229 TRACE AnnotationCacheOperationSource:102 - **Adding cacheable method 'getMaximumSimilarItems'** with attribute: [Builder[public java.lang.Integer com.quote.manager.impl.SystemConfigManagerImpl.getMaximumSimilarItems()] caches=[attachments] | key='#root.methodName' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='' | unless='' | sync='false']
@Cacheable(value = "attachments", key = "#root.methodName")
public Integer getMaximumSimilarItems() {
logger.info("GetMax");
SystemConfig systemConfig = systemConfigDao.getSystemConfig();
Integer maxSimilarItems = systemConfig.getMaximumSimilarItems();
if(maxSimilarItems != null) {
return maxSimilarItems;
}
return 20;
}
我在堆栈上看到调用和调用后的缓存拦截器。但仍然没有缓存任何内容。我尝试了多种缓存实现
有没有关于在Spring的缓存实现中设置调试点以找出它为什么不缓存的想法
我尝试了XML-config和Java-config@EnableCaching
<bean id="cacheManager" class="org.springframework.cache.jcache.JCacheCacheManager">
<property name="cacheManager">
<bean class="org.springframework.cache.jcache.JCacheManagerFactoryBean"
p:cacheManagerUri="classpath:ehcache.xml" />
</property>
</bean>
<cache:annotation-driven cache-manager="cacheManager" />
2019-11-05 11:16:51,370 INFO Eh107CacheManager:378 - Registering Ehcache MBean javax.cache:type=CacheStatistics,CacheManager=file./home/work/workspace-quotes/.metadata/.plugins/org.eclipse.wst.server.core/tmp7/wtpwebapps/app/WEB-INF/classes/ehcache.xml,Cache=attachments
2019-11-05 11:16:51,756 INFO Eh107CacheManager:378 - Registering Ehcache MBean javax.cache:type=CacheStatistics,CacheManager=file./home/work/workspace-quotes/.metadata/.plugins/org.eclipse.wst.server.core/tmp7/wtpwebapps/app/WEB-INF/classes/ehcache.xml,Cache=attachments
我看到了ehCache中定义的缓存。当应用程序启动时,xml也在注册,因此缓存正在启动
<ehcache:config
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:ehcache='http://www.ehcache.org/v3'
xsi:schemaLocation="http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.1.xsd">
<ehcache:cache alias="attachments">
<ehcache:resources>
<ehcache:heap unit="entries">100</ehcache:heap>
<ehcache:offheap unit="MB">1</ehcache:offheap>
</ehcache:resources>
</ehcache:cache>
</ehcache:config>
# 1 楼答案
所以问题是,在初始化上下文之前,我调用@Cacheable函数太早了。有一次我给它打了电话,它工作得很好
我补充说:
及
“根”检查有点像黑客,只在根事件完成时调用,否则会被调用两次。我不知道如何区分这些事件