我正在使用Spring Caching框架和redis。以下是我使用的Cacheable
@Cacheable(value = "oauth2token", key="#value + #type")
public OAuth2Token findOneByValueAndType(String value, String type);
我只是想创造一个我知道的钥匙。这给出了错误
14:20:21,199 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/veip-web].[Resteasy]] (http-/0.0.0.0:8080-63) JBWEB000236: Servlet.service() for servlet Resteasy threw exception: org.springframework.expression.spel.SpelEvaluationException: EL1030E:(pos 0): The operator 'ADD' is not supported between objects of type 'null' and 'null'
因为当我没有将键指定为fllows时。
@Cacheable(value = "oauth2token")
public OAuth2Token findOneByValueAndType(String value, String type);
我可以看到生成的疯狂密钥。我需要知道密钥,因为稍后我需要CachePut
并更新相同的项目。
我也试过跟随。
@Cacheable(value = "oauth2token", key="#type.contact(#value)")
public OAuth2Token findOneByValueAndType(String value, String type);
Spring抱怨#type
当时为空。
这里有什么问题。
答案 0 :(得分:3)
您可能没有每个参数名称的运行时信息(#value不知道)。更安全的是使用始终工作的#p
或#a
别名。 key="#p0 + #p1"
应该做到这一点。
话虽如此,我不会这样做。如果您在另一个带注释的方法中重用该键,我会implement KeyGenerator
作为bean并在需要处理这两个值的方法中传递该bean的引用。这样您就可以共享(并测试)该代码并避免重复。