service类
@Cacheable(value = "ServTypeCache",key="#dimsCode")
public DimsType getServByCode(String dimsCode){
return cfgDao.getServByCode(dimsCode);
}
xml
<cache:annotation-driven />
<!-- 创建spring cache bean -->
<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
<property name="caches">
<set>
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean">
<property name="name" value="ServTypeCache"/>
</bean>
</set>
</property>
</bean>
Controller调用,每次都会打出sql,怎么回事呀
DimsType dims = mConfigService.getServByCode(dimsCode);
额,我试过了。
cache:annotation-driven/ 放在Spring MVC 的配置文件里,Controller里调用,缓存是生效的,Junit不生效。
放到Spring的配置文件里,Controller调用缓存是不生效的,Junit生效。
所以,如果Spring 和 Spring MVC的配置文件是分开的,最好把cache:annotation-driven/在两边都加上。
至于为什么,我还不清楚。
去cfgDao.getServByCode这个方法里看看呢
public interface IConfigDaoMapper {
public DimsType getServByCode(String dimsCode);
public String getKeysByCode(String dimsCode);
}
cfgDao.getServByCode这个方法里没啥呀 是个mapper接口类
这就显而易见了,sql是在**Mapper.xml中出现的,会显示在log中,是为了方便查找错误。
用了缓存 应该只会查第一次的吧,所有应该只显示一次呀
我也遇到这个问题了,楼主解决了没有呢?抱大腿。。
求问楼主,最后是如何解决的?
在使用Spring @Cacheable注解的时候,要注意,如果类A的方法f()被标注了@Cacheable注解,那么当类A的其他方法,例如:f2(),去直接调用f()的时候,@Cacheable是不起作用的,原因是@Cacheable是基于Spring AOP代理类,f2()属于内部方法,直接调用f()时,是不走代理的