Spring Cacheable如何将方法调用结果传递给key?

时间:2017-01-05 10:28:18

标签: spring spring-el

考虑下面的代码片段,我试图调用一个可以用作键的propertiesContainer方法。

@Cacheable(value = EhCacheManagerApi.CACHE_X_TOKEN, key = ("#{propertiesContainer.getId()}"))
public String getToken(PropertiesContainer propertiesContainer)

我似乎无法弄清楚键的正确spel表达式,当前格式给了我:

org.springframework.expression.spel.SpelParseException: EL1043E:(pos 1): Unexpected token. Expected 'identifier' but was 'lcurly({)'

在我尝试key = ("#propertiesContainer.id")key = ("#propertiesContainer.getId()")

之前

propertiesContainer是一个方法getId返回String

的接口

所以这可能与使用SpEL的bean方法调用不一样?

2 个答案:

答案 0 :(得分:0)

您是否尝试过不带括号的纯表达式:

@Cacheable(value = EhCacheManagerApi.CACHE_X_TOKEN, key="propertiesContainer.id")

这适用于Spring 4.3.3,其中PropertiesContainer是一个带有getId()方法的接口。

此外,如果您在编译的代码中没有调试信息,则可能需要使用#p0.id而不是方法参数名称。请参阅the accepted answer here,但这会给我一个我怀疑的错误。

答案 1 :(得分:0)

请你试试这个

    @Cacheable(value = EhCacheManagerApi.CACHE_X_TOKEN, key = "#{T(java.lang.String).format('%d-%d', #propertiesContainer.id)}")