0

我正在尝试将 Spring Cache 与 Ehcache 一起使用。问题是当我的应用程序启动时它没有显示任何异常,但它使我的应用程序关闭。

以下是代码片段。

  @Cacheable(value="offerInformation",key="#offerInformation.accountType.value.concat('-').concat(#offerInformation.externalId).concat('-').concat(#offerInformation.accountTypeId)")
    public OfferInformation findOfferInformation(OfferInformation offerInformation){
        // We make sure the item will be returned from cache

        return null;
}

以下是我在整理我的应用程序时生成的日志

    2013-08-21 09:05:39,507 DEBUG [main]  Adding cacheable method 'findOfferInformation' with attribute: [CacheableOperation[public com.ericsson.enk.ene.model.OfferInformation com.ericsson.enk.ene.cache.AddOfferInfoToCache.findOfferInformation(com.ericsson.enk.ene.model.OfferInformation)] caches=[offerInformation] | condition='' | key='#offerInformation.accountType.value.concat('-').concat(#offerInformation.externalId).concat('-').concat(#offerInformation.accountTypeId)']
2013-08-21 09:05:39,507 DEBUG [main]  Creating implicit proxy for bean 'addOfferInfoToCache' with 0 common interceptors and 1 specific interceptors
2013-08-21 09:05:39,508 INFO  [main]  Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@6a969c29: defining beans 

我正在使用 Spring 3.1.1 版本。请帮我。

4

1 回答 1

0

http://forum.springsource.org/showthread.php?129579-How-to-construct-a-key-for-cache-in-Cacheable-annotation

从上面帖子中的最后一条评论看来,您需要更改密钥:

Spring 无法从它生成的代理中调用返回对象的方法。它试图访问缓存方法中返回的对象,而不是访问类中的方法

尝试更改密钥如下:

@Cacheable(value = "offerInformation",
           key = "#offerInformation.accountType+'-'+#offerInformation.externalId+'-'+#offerInformation.accountTypeId")
public OfferInformation findOfferInformation(OfferInformation offerInformation) {
        // make sure the item will be returned from cache
        return null;
}
于 2013-08-21T09:20:57.007 回答