我已经看到很多同一个问题的化身,但我想我已经尝试了所有修复 - 我的用法非常简单。
我一直在使用 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 {
....
}
这是接口(interface)上的方法,实现类是Spring管理的@Service("foo")
我尝试按照建议使用“p0”here但无济于事。我没有编译问题,我的服务器日志中也没有错误,所以我确信我的类路径中有所有必要的东西;命名空间都很好,因为我为此使用了 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
根本不起作用。必须有一些非常明显的东西我失踪了。 (我现在吃午饭了)
最佳答案
我的问题已经解决了。不幸的是,我无法准确指出我的问题出在哪里。当然,所需要的只是我在问题中提到的内容。
为了解决这个问题,我整理了一下我的 Spring 配置并清除了我的浏览器和应用程序服务器缓存和临时目录。我进行了完全全新安装,缓存现在可以正常工作了。
有可能我是用早期版本测试的,它没有在应用程序配置中包含这条重要的行:
<cache:annotation-driven/>
我一开始就忽略了这一点。也许我添加的那个直到现在才被接受。否则我很难过。感谢您的宝贵时间。
关于Spring @Cacheable 不工作-我的配置有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20494574/