Spring @Cacheable无法正常工作 - 我的配置出了什么问题?

时间:2013-12-10 12:29:01

标签: spring caching java-5

我已经看到了同样问题的许多化身,但我想我已经尝试了所有修复 - 我的使用非常简单。

我一直在使用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根本不起作用。我必须要有一些令人目眩的明显缺失。 (我现在吃午饭了)

2 个答案:

答案 0 :(得分:4)

我的问题已经解决。不幸的是,我无法准确指出我的问题所处的位置。当然,所需要的就是我在问题中提到的那些。

为了解决这个问题,我整理了一下我的Spring配置并清除了我的浏览器和应用服务器缓存和临时目录。我做了一个完全干净的安装,缓存正在运行。

我可能正在使用早期版本进行测试,该版本在应用程序配置中未包含此重要行:

<cache:annotation-driven/>

我在开始时已经省略了。也许我添加的内容直到现在才被提取。否则我很难过。谢谢你的时间。

答案 1 :(得分:0)

你有没有改变

@Cacheable(value="parentAppIds", key="accountNumber")

@Cacheable(value="parentAppIds", key="#accountNumber")

添加#,在尝试缓存工作时为我删除了一个错误。