1. Google의 Spring Cache Annotation과 혼동하면 안됨. 중복 사용으로 인해서 꼬이지 않도록 해야 함
http://code.google.com/p/ehcache-spring-annotations
2. Spring Cache를 쓰기로 결정했다면 잘 유의할 내용
(1) pom dependency 추가
// Spring 3 은 기본 추가. .
<dependency> |
(2) Spring 문서를 정독
http://static.springsource.org/spring/docs/3.1.0.M1/spring-framework-reference/html/cache.html
(3) 괜찮은 Tutorial
http://sonegy.wordpress.com/2011/12/29/spring-3-1과-ehcache/
여기에 오타가 있어서 bean 정의시 xml schem location에 문제가 있음. 아래와 같이 사용.
<?xml version="1.0" encoding="UTF-8"?> |
(3) Cachable 적용이 안 된다고 있다면,다음을 확인
1) 그냥 클래스의 method에 추가해서 쓰면 적용이 안됨. Proxy를 이용하기 때문에 interface를 상속하는 클래스의 public method에서만 사용 가능
2) self-invocation 는 안됨
(4) SPEL을 이용해서 key를 정의할 수 있음.
1) 특정 파라미터만 이용해서 key 정의 가능
http://stackoverflow.com/questions/11889428/spring-cacheable-with-complex-keys-still-executed
@Cacheable(value="cahceName", key="#p0.concat('-').concat(#p1)") |
자세한 내용은 이곳(http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/cache.html#cache-spel-context) 을 참조
2) 설정 + 클래스 이용
http://stackoverflow.com/questions/6730641/how-can-i-set-a-custom-keygenerator-for-spring-cache
|
3) 복잡한 경우라면. AOP를 사용할 수 있다.
Old
http://springtips.blogspot.kr/2007/06/caching-methods-result-using-spring-and_23.html
new : cache:advice 이용
4) Default Key Generator 구현 정보
public class DefaultKeyGenerator implements KeyGenerator { public static final int NO_PARAM_KEY = 0; public static final int NULL_PARAM_KEY = 53; public Object generate(Object target, Method method, Object... params) { if (params.length == 1) { return (params[0] == null ? NULL_PARAM_KEY : params[0]); } if (params.length == 0) { return NO_PARAM_KEY; } int hashCode = 17; for (Object object : params) { hashCode = 31 * hashCode + |
(5) Ehcache 설정 중 중요한 부분
overflowToDisk 는 정말 필요할 경우에만.
LRU는 캐쉬의 기본 정책. 안쓰는 녀석은 퇴출(eviction)
maxElementsInMemory 는 얼마나 가지고 있을지(size)
timeToLiveSeconds 는 cache expire 정책.
'general java' 카테고리의 다른 글
Spring-Cache 키 생성 유의사항 (0) | 2012.09.05 |
---|---|
Spring-Mybatis, Spring으로 여러 DB(Multiple DB) 접근하는 개발할 때, 문제 해결 팁 (1) | 2012.08.30 |
Spring MVC-I18n 지원 (0) | 2012.08.03 |
Spring에서 property의 default value 지정하기 (0) | 2012.08.03 |
Mysql 에서 Spring Batch를 이용하여 Job Repository Table 생성 또는 삭제하는 예제 - 2 (0) | 2012.07.28 |