SpEl 이란?
Spring Expression Language 의 약자로 스프링에서 지원해주는 표현식이다.
4번에서 사용한다.
종류
|
설명
|
예시
|
#root.methodName
|
호출되는 메소드의 이름
|
#root.methodName
|
#인자의 이름
|
인자의 값
|
#param1
|
Cache
Java 메소드에 캐싱을 적용, 같은 인자로 이미 실행을 했던 메소드이면 캐시에 저장된 결과를 반환
메소드의 반복 실행 횟수를 줄여준다.
입력(혹은 인자)이 같으면 출력(결과)도 같다는 것을 보장하는 메서드에서만 사용
1. 모든 인자를 키로 갖는다.
@Cacheable("TestValue")
public String Test(Test testReq, Boolean isValid)
2. key로 선언된 인자만 키로 갖는다.
@Cacheable(value="TestValue", key="#testReq")
public String Test(Test testReq, Boolean isValid)
@Cacheable(value="TestValue", key="#testReq.seq")
public String Test(Test testReq)
@Cacheable(value="TestValue", key="T(someType).hash(#testReq)")
public String Test(Test testReq)
3. 메소드의 이름 Test를 키로 갖는다.
@Cacheable(value="TestValue", key="#root.methodName")
public String Test(Test testReq, Boolean isValid)
0. 의존성 추가
build.gradle
implementation 'org.springframework.boot:spring-boot-starter-cache'
implementation 'org.ehcache:ehcache:3.8.0'
implementation 'javax.cache:cache-api:1.0.0'
1. 캐시 정의
- resources - heap : 사용될 캐시의 저장 크기
- expiry - ttl : 캐시 만료 시간
ehcache.xml
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.ehcache.org/v3"
xmlns:jsr107="http://www.ehcache.org/v3/jsr107"
xsi:schemaLocation="
http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.0.xsd
http://www.ehcache.org/v3/jsr107 http://www.ehcache.org/schema/ehcache-107-ext-3.0.xsd">
<cache alias="mobileRecommendList">
<expiry><ttl unit="minutes">10</ttl></expiry>
<resources><heap unit="entries">4</heap></resources>
</cache>
</config>
2. 프로젝트 설정 파일에 추가
application.yml
spring.cache.jcache.config=classpath:ehcache.xml
3. 캐시 선언 @EnableCaching
@EnableConfigurationProperties
@EnableAsync
@EnableCaching
@EnableScheduling
@SpringBootApplication
public class FrontapiApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(FrontapiApplication.class)
.listeners(new LoadAdditionalProperties())
.run(args);
}
}
4. 캐싱 사용 @Cacheable
- value는 cache의 alias
- key는 해당 캐시가 저장 되었을때 key가 될 값
키가 여러개일 때는 "/" 를 사용
@Cacheable(value = "timedealTeaser", key="#request.tz_evt_code")
public List<TimedealTeaser> getTimedealTeaser(TimedealTeaserRequest request) {
return _timedealMapper.getTimedealTeaser(request);
}
@Cacheable(value = "timedealNormal", key="#request.evt_code + '/' + #request.schedule_idx")
public List<String> getTimedealNormal(TimedealMinimalRequest request) {
return _timedealMapper.getTimedealNormal(request);
}
5. 캐시 제거
- @Caching(evict={}) 선언 : 한번에 여러개의 캐시를 지우기위해 사용
- @CacheEvict : 하나의 캐시만 지운다면 더 짧게 사용가능한 어노테이션
- allEntries : 모든 key의 캐시를 제거
@Caching(evict = {
@CacheEvict(value = "timedealTeaser", allEntries = true)
, @CacheEvict(value = "timedealNormal", allEntries = true)
})
public void deleteTimedealCache(){}
@CacheEvict(value = "timedealTeaser", allEntries = true)
public void deleteTimedealTeaserCache(){}
반응형
'Java' 카테고리의 다른 글
@pathvariable (0) | 2023.01.26 |
---|---|
VO 데이터 추출 (0) | 2023.01.26 |
Reflection (0) | 2023.01.20 |
@Transactional (0) | 2023.01.19 |
[안전한 객체 생성법] Builder 패턴 + Assert (0) | 2023.01.19 |