Browse Source

feat : Cache 생명주기 등 기본 설정 , code service단에 적용

pull/7/head
박재우 7 months ago
parent
commit
eb5d56b4ef
  1. 7
      app/kac-app/build.gradle
  2. 46
      app/kac-app/src/main/java/kr/co/palnet/kac/app/config/CachingConfig.java
  3. 22
      data/com/src/main/java/kr/co/palnet/kac/data/com/service/ComCodeDomainService.java

7
app/kac-app/build.gradle

@ -23,7 +23,12 @@ dependencies {
// querydsl
implementation "com.querydsl:querydsl-jpa:5.0.0:jakarta"
//cache
implementation 'org.springframework.boot:spring-boot-starter-cache'
implementation 'org.ehcache:ehcache:3.10.0'
implementation 'org.hibernate:hibernate-jcache:6.0.2.Final'
implementation 'javax.cache:cache-api:1.1.1'
// rest doc
asciidoctorExt 'org.springframework.restdocs:spring-restdocs-asciidoctor'

46
app/kac-app/src/main/java/kr/co/palnet/kac/app/config/CachingConfig.java

@ -0,0 +1,46 @@
package kr.co.palnet.kac.app.config;
import java.time.Duration;
import javax.cache.CacheManager;
import org.ehcache.config.builders.CacheConfigurationBuilder;
import org.ehcache.config.builders.ExpiryPolicyBuilder;
import org.ehcache.config.builders.ResourcePoolsBuilder;
import org.ehcache.config.units.EntryUnit;
import org.ehcache.config.units.MemoryUnit;
import org.ehcache.jsr107.Eh107Configuration;
import org.hibernate.cache.jcache.ConfigSettings;
import org.springframework.boot.autoconfigure.cache.JCacheManagerCustomizer;
import org.springframework.boot.autoconfigure.orm.jpa.HibernatePropertiesCustomizer;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@EnableCaching
@Configuration
public class CachingConfig {
private final javax.cache.configuration.Configuration<Object, Object> jCacheConfiguration;
public CachingConfig() {
this.jCacheConfiguration = Eh107Configuration.fromEhcacheCacheConfiguration(CacheConfigurationBuilder.newCacheConfigurationBuilder(Object.class, Object.class,
ResourcePoolsBuilder.newResourcePoolsBuilder()
.heap(10000, EntryUnit.ENTRIES))
.withSizeOfMaxObjectSize(1000, MemoryUnit.B)
.withExpiry(ExpiryPolicyBuilder.timeToIdleExpiration(Duration.ofSeconds(30)))
.withExpiry(ExpiryPolicyBuilder.timeToLiveExpiration(Duration.ofSeconds(60))));
}
@Bean
public HibernatePropertiesCustomizer hibernatePropertiesCustomizer(CacheManager cacheManager) {
return hibernateProperties -> hibernateProperties.put(ConfigSettings.CACHE_MANAGER, cacheManager);
}
@Bean
public JCacheManagerCustomizer cacheManagerCustomizer() {
return cm -> {
cm.createCache("code", jCacheConfiguration);
};
}
}

22
data/com/src/main/java/kr/co/palnet/kac/data/com/service/ComCodeDomainService.java

@ -8,6 +8,11 @@ import kr.co.palnet.kac.data.com.repository.ComCdGroupBasRepository;
import kr.co.palnet.kac.data.com.repository.ComCdLangCtgRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -18,47 +23,59 @@ import java.util.List;
@Transactional
@RequiredArgsConstructor
@Service
@CacheConfig(cacheNames = "code")
public class ComCodeDomainService {
private final ComCdGroupBasRepository comCdGroupBasRepository;
private final ComCdBasRepository comCdBasRepository;
private final ComCdLangCtgRepository comCdLangCtgRepository;
@CacheEvict(value = "code", allEntries = true)
@Scheduled(fixedRateString = "${caching.spring.ttl}")
public void removeCodeCache() {
log.info("removing code cache" );
}
// 그룹 조회
@Transactional(readOnly = true)
@Cacheable(value = "code", key = "'all'")
public List<ComCdGroupBas> getComCdGroupBasList() {
return comCdGroupBasRepository.findAll();
}
@Transactional(readOnly = true)
@Cacheable(value = "code", key = "#siteCd")
public List<ComCdGroupBas> getComCdGroupBasList(String siteCd) {
return comCdGroupBasRepository.findBySiteCd(siteCd);
}
@Transactional(readOnly = true)
@Cacheable(value = "code", key = "#groupCd")
public ComCdGroupBas getComCdGroupBas(String groupCd) {
return comCdGroupBasRepository.findById(groupCd).orElse(null);
}
// 코드 조회
@Transactional(readOnly = true)
@Cacheable(value = "code", key = "#groupCd")
public List<ComCdBas> getComCdBasList(String groupCd) {
return comCdBasRepository.findByGroupCdAndUseYnOrderBySortOrdrAsc(groupCd, "Y");
}
@Transactional(readOnly = true)
@Cacheable(value = "code", key = "'KeyIs' + #groupCd + #cdId")
public ComCdBas getComCdBas(String groupCd, String cdId) {
return comCdBasRepository.findByGroupCdAndCdIdAndUseYn(groupCd, cdId, "Y");
}
// 언어 조회
@Transactional(readOnly = true)
@Cacheable(value = "code", key = "'KeyIs' + #groupCd + #cdId")
public List<ComCdLangCtg> getComCdLangCtgList(String groupCd, String cdId) {
return comCdLangCtgRepository.findByGroupCdAndCdId(groupCd, cdId);
}
@Transactional(readOnly = true)
@Cacheable(value = "code", key = "'KeyIs' + #groupCd + #cdId + #langDivCd")
public ComCdLangCtg getComCdLangCtg(String groupCd, String cdId, String langDivCd) {
ComCdLangCtg.ComCdLangCtgId id = ComCdLangCtg.ComCdLangCtgId.builder()
.groupCd(groupCd)
@ -187,11 +204,13 @@ public class ComCodeDomainService {
}
// 그룹 삭제
@CacheEvict(value = "code", key = "#groupCd")
public void deleteComCdGroupBas(String groupCd) {
comCdGroupBasRepository.deleteById(groupCd);
}
// 코드 삭제
@CacheEvict(value = "code", key = "'KeyIs' + #groupCd + #cdId")
public void deleteComCdBas(String groupCd, String cdId) {
var id = ComCdBas.ComCdBasId.builder()
.groupCd(groupCd)
@ -201,6 +220,7 @@ public class ComCodeDomainService {
}
// 언어 삭제
@CacheEvict(value = "code", key = "'KeyIs' + #groupCd + #cdId + langDivCd")
public void deleteComCdLangCtg(String groupCd, String cdId, String langDivCd) {
var id = ComCdLangCtg.ComCdLangCtgId.builder()
.groupCd(groupCd)

Loading…
Cancel
Save