【发布时间】:2015-09-18 11:24:24
【问题描述】:
我已经看到过很多相同问题的化身,但我想我已经尝试了所有的修复方法 - 我的用法非常简单。
我一直在使用 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 根本不起作用。一定有一些非常明显的东西我错过了。 (我已经吃过午饭了)
【问题讨论】:
-
我遇到了 Spring Caching 的问题,因为我在同一个类中调用了带注释的方法,忘记了代理不是这样工作的。你说注释在接口上,所以这可能不是你的问题,我只是把它扔在那里。