반응형

Ehcache에서 제공하는 @Cacheable에 들어갈 수 있는 key는 단일 String이다.

결론적으로, 하나의 String key만 지원하는 것이었고, 즉 multiple key를 지원을 하지 않기 때문에, 대충 문자열 조합으로 생각을 해보았다.  

(redis나 memcached에서도 이런 방법을 많이 사용하는듯)

 

처음엔 아래와 같이 작성하였다. 


@Cacheable(value="#a:#b") 
public Object cache(String a, int b) {
  // TODO 
}

 

결과는 실패..

원인은.. 콜론을 그냥 사용하면, Spring Expression과 어긋난다는 거였다.

 

그래서 아래 Spring Expression을 확인해보았다. 

http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/expressions.html

 

결론은 문자열을 붙이고 싶으면, concat을 이용하라는 것 같다.

 

@Cacheable(value="#a.concat(:).concat(#b)") 
public Object cache(String a, int b) {
  // TODO 
}



But! 앞에 인자값이 int인 경우에는 int에 concat 메소드가 없기 때문에 에러가 발생한다.

그래서.. Integer.toString을 해본 후에 넣어봤는데, spEl에서 Integer를 찾을 수 없다고 한다.


해결방법 : int에 그냥 toString() 붙이고 concat하니까 잘 된다. 

int 자체에는 toString이 없는데 spEL에서 Object형태로 변환을 하나보다.


@Cacheable(value="#a.toString().concat(:).concat(#b)") 
public Object cache(int a, int b) {
  // TODO 
}
반응형
,