티스토리 뷰

728x90

 

테스트 배경은 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
댓글
250x250
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함