일/Spring2018. 1. 11. 11:35


참고 포스트

  • 간단 구현 http://theeye.pe.kr/archives/1593
  • 상세 포스트 http://javacan.tistory.com/entry/133



공통 코드를 찾는 기준으로 캐시를 사용했을 때 기준.



-context-cache.xml


<?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:cache="http://www.springframework.org/schema/cache"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd

http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-4.0.xsd">

<cache:annotation-driven key-generator="simpleKeyGenerator" />

<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">

<property name="cacheManager" ref="ehcache" />

</bean>

<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">

<property name="configLocation" value="classpath:spring/ehcache.xml" />

<property name="shared" value="false" />

</bean>

<bean id="simpleKeyGenerator" class="org.springframework.cache.interceptor.SimpleKeyGenerator" />

</beans>




-ehcache.xml


<?xml version="1.0" encoding="UTF-8"?>

<ehcache>

<!--

name 캐시의 이름 필수

maxElementsInMemory 메모리에 저장될 수 있는 객체의 최대 개수 필수

eternal 이 값이 true이면 timeout 관련 설정은 무시되고, Element가 캐시에서 삭제되지 않는다. 필수

overflowToDisk 메모리에 저장된 객체 개수가 maxElementsInMemory에서 지정한 값에 다다를 경우 디스크에 오버플로우 되는 객체는 저장할 지의 여부를 지정한다. 필수

timeToIdleSeconds Element가 지정한 시간 동안 사용(조회)되지 않으면 캐시에서 제거된다. 이 값이 0인 경우 조회 관련 만료 시간을 지정하지 않는다. 기본값은 0이다. 선택

timeToLiveSeconds Element가 존재하는 시간. 이 시간이 지나면 캐시에서 제거된다. 이 시간이 0이면 만료 시간을 지정하지 않는다. 기본값은 0이다. 선택

diskPersistent VM이 재 가동할 때 디스크 저장소에 캐싱된 객체를 저장할지의 여부를 지정한다. 기본값은 false이다. 선택

diskExpiryThreadIntervalSeconds Disk Expiry 쓰레드의 수행 시간 간격을 초 단위로 지정한다. 기본값은 120 이다. 선택

memoryStoreEvictionPolicy 객체의 개수가 maxElementsInMemory에 도달했을 때,메모리에서 객체를 어떻게 제거할 지에 대한 정책을 지정한다. 기본값은 LRU이다. FIFO와 LFU도 지정할 수 있다. 선택

-->


<defaultCache

name="defaut"

maxElementsInMemory="100"

eternal="false"

overflowToDisk="false"

timeToIdleSeconds="300"

timeToLiveSeconds="600"

diskPersistent="false"

memoryStoreEvictionPolicy="FIFO"

/>


<!-- msgSvc  -->

<cache

name="msgCache"

maxElementsInMemory="1000"

eternal="false"

overflowToDisk="false"

timeToIdleSeconds="300"

timeToLiveSeconds="600"

diskPersistent="false"

memoryStoreEvictionPolicy="LRU"

/>

<!-- cmCdSvc,cmGrpCdSvc  -->

<cache

name="codeCache"

maxElementsInMemory="1000"

eternal="false"

overflowToDisk="false"

timeToIdleSeconds="300"

timeToLiveSeconds="600"

diskPersistent="false"

memoryStoreEvictionPolicy="LRU"

/>

</ehcache>



-java 구현 파일

*@Cacheable("codeCache") >> value나 cashNames로 설정 가능 @Cacheable(value="codeCache") or @Cacheable(cachNames="codeCache")

*@Cacheable(value="codeCache",key="c#mGrpCd") 형식으로 key를 지정할 수 있음. key를 지정하지 않으면 프레임워크에서 들어온 파라미터를 조합하여 키를 자체 생성하여 관리한다.


@Cacheable("codeCache")

public List searchCmCdList(String cmGrpCd) {

CmCdVo vo = new CmCdVo();

vo.setCmGrpCd(cmGrpCd);

return cboCmDao.selectList(CmCdDao.searchCmCdList, vo);

}

Posted by JayCeeP