복붙노트

[SPRING] SpEL 키가있는 @Cacheable : 항상 null로 평가됩니다.

SPRING

SpEL 키가있는 @Cacheable : 항상 null로 평가됩니다.

@Cacheable에 문제가 있고 Spring 표현식 언어를 기반으로하는 맞춤 키를 사용하고 있습니다. 다음 코드가 있습니다.

@Cacheable(value = "myCache", key = "#providerDTO.identifier")
ClientVO loadClientVOByProviderDTO(ProviderDTO providerDTO);

이것은 다음과 같은 오류를 던지고있다.

org.springframework.expression.spel.SpelEvaluation Exception: EL1007Epos 0): Field or property 'identifier' cannot be found on null

providerDTO 인수가 null이 아니므로 여러 번 확인했습니다. 문서는 이것이 내가 혼란 스러울 정도로 작동해야한다고 말한다. 문서는 다음 예제를 제공합니다.

@Cacheable(value="books", key="#isbn.rawNumber")

나는 또한 정적 방법으로 시도했다. providerDTO가 null이기 (위해) 때문에, NullPointerException가 Throw됩니다.

public static String cacheKey(ProviderDTO providerDTO)                                                                                                                                                                                                                    
{                                                                                                                                                                                                                                                                         
    return providerDTO.identifier + "-" + providerDTO.clientID + "-" + providerDTO.clubID;                                                                                                                                                                            
}

무슨 일이 일어나고 있는지 이것을 알기 위해 어떻게 디버깅 할 수 있습니까? 이것은 Spring 3.2.4-RELEASE이다. @Cacheable 태그는 인터페이스 상에 있지만 AspectJ가 아닌 표준 스프링 AOP를 사용하고 있기 때문에 이것이 여전히 잘 작동해야한다는 것을 이해합니다.

해결법

  1. ==============================

    1.SpelEvaluationException의 중복 가능성 : EL1007E : (pos 43) : null 또는 스프링에서 'group'필드 또는 속성을 찾을 수 없습니다. @ Cacheable with Ehcache, spel find for valid object - 디버그 정보없이 컴파일 할 것입니다. Maven 구성을 확인하십시오. 여기에 관련된 비트를 게시 할 수 있습니다. POM (또는 상위 POM)에서 다음과 같이 maven-compiler-plugin 및 행을 검색합니다.

    SpelEvaluationException의 중복 가능성 : EL1007E : (pos 43) : null 또는 스프링에서 'group'필드 또는 속성을 찾을 수 없습니다. @ Cacheable with Ehcache, spel find for valid object - 디버그 정보없이 컴파일 할 것입니다. Maven 구성을 확인하십시오. 여기에 관련된 비트를 게시 할 수 있습니다. POM (또는 상위 POM)에서 다음과 같이 maven-compiler-plugin 및 행을 검색합니다.

    <debug>false</debug>
    
  2. from https://stackoverflow.com/questions/18157058/spring-cacheable-with-spel-key-always-evaluates-to-null by cc-by-sa and MIT license