728x90
Spring 3.0으로 개발하면서 캐쉬를 적용 할 일이있어서 몇가지 방법을 찾던중 쉽게 적용 가능한 방법이 있어서 소개합니다.
간단한 소개를 하면 ehcache를 사용하여 캐쉬를 하고, 메서드에 어노테이션으로 추가하여 캐쉬를 설정할 수 있다.
적용방법
일단 라이브러리를 추가
<dependency> <groupId>com.googlecode.ehcache-spring-annotations</groupId> <artifactId>ehcache-spring-annotations</artifactId> <version>1.1.2</version> </dependency>
Spring Bean 설정(볼드 처리한 부분 추가)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring
http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd">
<!-- Scans within the base package of the application for @Components to configure as beans -->
<context:component-scan base-package="org.igooo.blog" />
<!-- ehcache -->
<ehcache:annotation-driven cache-manager="ehCacheManager" />
<bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" />
</beans>
ehcache 설정(ehcache.xml)
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" updateCheck="false">
<defaultCache eternal="false" maxElementsInMemory="1000"
overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0"
timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU"/>
<cache name="accountCache" eternal="false"
maxElementsInMemory="100" overflowToDisk="false" diskPersistent="false"
timeToIdleSeconds="0" timeToLiveSeconds="300"
memoryStoreEvictionPolicy="LRU" />
</ehcache>
끝.... ehcache,xml을 지정하는 부분이 없는데 클래스 패스에 있으면 알아서 읽어 가나보다...
사용법은 간단하게 메소드 위에 @Caheable 어노테이션만 추가하면 끝난다.
@Service
public class AccountServiceImpl implements AccountService {
..........
@Cacheable(cacheName = "accountCache")
@Transactional(readOnly = true)
@Override
public List<Account> selectAll() {
return accountDao.selectAll();
}
........
}
DAO가 Hibernate로 구현되어있는데 알아서 캐쉬된다.. iBatis도 테스트 해봤는데 문제 없었음...
추가 기능에 대해서는 문서를 더 찾아봐야겠지만..
'dev > spring' 카테고리의 다른 글
Spring - Modulith (0) | 2024.06.03 |
---|---|
Spring Framework - Runtime efficiency with String (today and tomorrow) (0) | 2024.06.02 |
HiddenHttpMethodFilter (0) | 2010.06.24 |
Maven Build Script (spring + hibernate) (0) | 2009.12.07 |
Don't repeat the DAO!(Hibernate) (0) | 2008.11.27 |