티스토리 뷰
테스트 배경은 spirng boot + maven + ehcache3
해당 내용은 ehcache 사용에 대한 겉핥기 내용만 다루므로 참고 바란다.
pom.xml에 아래 라이브러리들을 추가해준다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>javax.cache</groupId>
<artifactId>cache-api</artifactId>
</dependency>
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
application.yaml과 같은 위치에 ehcache.xml 파일을 만들어 설정한다.
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://www.ehcache.org/v3">
<cache alias="foo">
<key-type>java.lang.Object</key-type>
<value-type>java.lang.Object</value-type>
<listeners> <!-- listeners는 Cache의 리스너를 등록하는 요소이다. -->
<listener>
<class>com.example.sample.CacheEventLogger</class> <!-- 캐싱처리에 대한 리스너가 등록된 클래스의 FQCN을 등록한다. -->
<event-firing-mode>ASYNCHRONOUS</event-firing-mode>
<event-ordering-mode>UNORDERED</event-ordering-mode>
<events-to-fire-on>CREATED</events-to-fire-on>
<events-to-fire-on>EXPIRED</events-to-fire-on>
</listener>
</listeners>
<resources>
<heap unit="entries">2</heap>
<offheap unit="MB">10</offheap>
</resources>
</cache>
<!-- 템플릿 설정 -->
<cache-template name="myDefaults">
<key-type>java.lang.Long</key-type>
<value-type>java.lang.String</value-type>
<heap unit="entries">200</heap>
</cache-template>
<!-- 템플릿 사용 예 1 -->
<cache alias="simpleCache" uses-template="myDefaults" />
<!-- 템플릿 사용 예 2 key 타입을 변경했다 -->
<cache alias="bar" uses-template="myDefaults">
<key-type>java.lang.Number</key-type>
</cache>
</config>
테스트만 하기 위해서 ehcache 공식 홈페이지의 예시와 블로그를 떠돌다가 가져옴...
xml에 대해서 더 자세하게 알고 싶다면 ehcache 공식 홈페이지를 확인하자
여기서 근데 중요한건 listeners의 위치이다
listener 보다 resource 태그를 먼저 작성하면 javax.bind.xml ..... 하는 오류가 생긴다.
이걸로 한참 고생했는데...,, 리스너를 쓰고자 할 경우 꼭 resource 태그 전에 작성하자
이후 listener의 class 위치에 맞추어 이벤트 로거를 작성해준다.
이벤트 로거는 캐시 작업이 진행되면 자동으로 맞춰서 실행이 된다.
import org.ehcache.event.CacheEvent;
import org.ehcache.event.CacheEventListener;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class CacheEventLogger implements CacheEventListener<Object, Object> {
@Override
public void onEvent(CacheEvent<? extends Object, ? extends Object> cacheEvent) {
log.info("cache event logger message. getKey: {} / getOldValue: {} / getNewValue:{}", cacheEvent.getKey(), cacheEvent.getOldValue(), cacheEvent.getNewValue());
}
}
그리고 남은건 @EnableCaching 과 @Cacheable 어노테이션을 추가하여 원하는 메서드에 달아주면 된다
import javax.cache.CacheManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Configuration;
import lombok.extern.slf4j.Slf4j;
@Configuration
@EnableCaching
@Slf4j
public class CacheConfig implements CommandLineRunner {
@Autowired
private CacheManager cacheManager;
@Override
public void run(String... args) throws Exception {
log.info("\n\n" + "=========================================================\n" + "Using cache manager: "
+ this.cacheManager.getClass().getName() + "\n"
+ "=========================================================\n\n");
}
}
ehcache를 제대로 사용하고 있는지 확인하려고 찍어본 로그
=========================================================
Using cache manager: org.ehcache.jsr107.Eh107CacheManager
=========================================================
위와 같이 표시됩니다.
메서드에 추가할 때는 @Cacheable(cacheNames = "foo") 형태로 달아주면 끝
아직 풀리지 않은 궁금증.... 나중에 언젠가 찾아볼 예정
공홈에서는 <listeners>태그에 대해서 전혀 찾아볼 수 없었는데 이유가 뭔지
728x90
'#2 > Spring boot' 카테고리의 다른 글
[Spring boot] Spring boot admin 사용해보기 (0) | 2022.06.24 |
---|---|
[Spring boot] UserDetailsService 커스텀하기 (0) | 2022.05.31 |
[Spring boot] Junit 테스트 아무것도 안뜸 | junit4, junit5 (0) | 2022.02.21 |
[Spring boot] sts maven 프로젝트 생성 시 무한 로딩 79% (0) | 2022.01.25 |
[Spring boot] 파일 업로드, 다운로드, 이미지 띄우기 (0) | 2021.10.07 |
댓글