我已经看到了同样问题的许多化身,但我想我已经尝试了所有修复 - 我的使用非常简单。
我一直在使用Ehcache,但也没用。因此,为了排除Ehcache问题并帮助指出更基本的东西,我转移到了SimpleCacheManager和ConcurrentMapCacheFactoryBean。
这是我的配置:
<cache:annotation-driven/>
<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
<property name="caches">
<set>
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="parentAppIds"/>
</set>
</property>
</bean>
这是我的方法:
@Cacheable(value="parentAppIds", key="accountNumber")
public Long findApplicationId(String accountNsc, String accountNumber) throws EMSException {
....
}
这是一个接口上的方法,实现类的是Spring管理@Service("foo")
我按照建议here尝试使用'p0',但无济于事。我的服务器日志中没有编译问题且没有错误,所以我相信我的类路径上有所有必要的东西;并且命名空间都很好,因为我正在使用STS - 所以我省略了pom.xml和spring命名空间声明来阻止噪音。
我正在使用Spring 3.1; Java 1.5和Websphere 6.1
症状是重复使用相同参数访问该方法。
请帮助 - 我很饿,拒绝去吃午饭,直到我指出这个。
注意:我简化了我的@Cacheable声明,我的实际声明是
@Cacheable(value="parentAppIds", key="#p0.concat('-').concat(#p1)")
都没有工作。
感谢。
**编辑 - 我通过使用
创建测试装置,排除了Websphere的问题@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(...)
模仿正在发生的事情。 @Cacheable
根本不起作用。我必须要有一些令人目眩的明显缺失。 (我现在吃午饭了)
答案 0 :(得分:4)
我的问题已经解决。不幸的是,我无法准确指出我的问题所处的位置。当然,所需要的就是我在问题中提到的那些。
为了解决这个问题,我整理了一下我的Spring配置并清除了我的浏览器和应用服务器缓存和临时目录。我做了一个完全干净的安装,缓存正在运行。
我可能正在使用早期版本进行测试,该版本在应用程序配置中未包含此重要行:
<cache:annotation-driven/>
我在开始时已经省略了。也许我添加的内容直到现在才被提取。否则我很难过。谢谢你的时间。
答案 1 :(得分:0)
你有没有改变
@Cacheable(value="parentAppIds", key="accountNumber")
到
@Cacheable(value="parentAppIds", key="#accountNumber")
添加#
,在尝试缓存工作时为我删除了一个错误。