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 }
'개발 > Spring Framework' 카테고리의 다른 글
[Spring Framework] PointCut 표현식 (0) | 2016.06.10 |
---|---|
[Spring Framework] Properties Reload (0) | 2016.06.10 |
[Swagger-SpringMVC] Swagger-SpringMVC with Swagger-UI (REST API auto documentation) (0) | 2016.06.10 |
[Spring Framework] GsonHttpMessageConverter (0) | 2016.06.10 |
[Spring MVC] 404 Error Handling (0) | 2016.06.10 |