spring-boot ehcache example added (#6012)

This commit is contained in:
pcoates33
2019-01-05 12:39:43 +00:00
committed by Grzegorz Piwowarek
parent e3e1c84b24
commit cceb6a022e
10 changed files with 260 additions and 0 deletions
@@ -0,0 +1,13 @@
package com.baeldung.cachetest;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@@ -0,0 +1,57 @@
package com.baeldung.cachetest.config;
import java.math.BigDecimal;
import java.time.Duration;
import javax.cache.CacheManager;
import org.ehcache.config.CacheConfiguration;
import org.ehcache.config.ResourcePools;
import org.ehcache.config.builders.CacheConfigurationBuilder;
import org.ehcache.config.builders.CacheEventListenerConfigurationBuilder;
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.event.EventType;
import org.ehcache.jsr107.Eh107Configuration;
import org.springframework.boot.autoconfigure.cache.JCacheManagerCustomizer;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableCaching
public class CacheConfig {
private static final int ON_HEAP_CACHE_SIZE_ENTRIES = 2;
private static final int OFF_HEAP_CACHE_SIZE_MB = 10;
private static final int CACHE_EXPIRY_SECONDS = 30;
@Bean
public JCacheManagerCustomizer jcacheManagerCustomizer() {
return new JCacheManagerCustomizer() {
@Override
public void customize(CacheManager cacheManager) {
ResourcePools resourcePools = ResourcePoolsBuilder.newResourcePoolsBuilder()
.heap(ON_HEAP_CACHE_SIZE_ENTRIES, EntryUnit.ENTRIES)
.offheap(OFF_HEAP_CACHE_SIZE_MB, MemoryUnit.MB).build();
CacheEventListenerConfigurationBuilder eventLoggerConfig = CacheEventListenerConfigurationBuilder
.newEventListenerConfiguration(new CacheEventLogger(), EventType.CREATED, EventType.EXPIRED)
.unordered().asynchronous();
CacheConfiguration<?, ?> cacheConfiguration = CacheConfigurationBuilder
.newCacheConfigurationBuilder(Long.class, BigDecimal.class, resourcePools)
.withExpiry(ExpiryPolicyBuilder.timeToLiveExpiration(Duration.ofSeconds(CACHE_EXPIRY_SECONDS)))
.add(eventLoggerConfig).build();
cacheManager.createCache("squareCache",
Eh107Configuration.fromEhcacheCacheConfiguration(cacheConfiguration));
}
};
}
}
@@ -0,0 +1,18 @@
package com.baeldung.cachetest.config;
import org.ehcache.event.CacheEvent;
import org.ehcache.event.CacheEventListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class CacheEventLogger implements CacheEventListener<Object, Object> {
private static final Logger log = LoggerFactory.getLogger(CacheEventLogger.class);
@Override
public void onEvent(CacheEvent<? extends Object, ? extends Object> cacheEvent) {
log.info("Cache event {} for item with key {}. Old value = {}, New value = {}", cacheEvent.getType(),
cacheEvent.getKey(), cacheEvent.getOldValue(), cacheEvent.getNewValue());
}
}
@@ -0,0 +1,29 @@
package com.baeldung.cachetest.rest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.baeldung.cachetest.service.NumberService;
@RestController
@RequestMapping(path = "/number", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public class NumberController {
private final static Logger log = LoggerFactory.getLogger(NumberController.class);
@Autowired
private NumberService numberService;
@GetMapping(path = "/square/{number}")
public String getThing(@PathVariable Long number) {
log.info("call numberService to square {}", number);
return String.format("{\"square\": %s}", numberService.square(number));
}
}
@@ -0,0 +1,22 @@
package com.baeldung.cachetest.service;
import java.math.BigDecimal;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
@Service
public class NumberService {
private final static Logger log = LoggerFactory.getLogger(NumberService.class);
@Cacheable(value = "squareCache", key = "#number", condition = "#number>10")
public BigDecimal square(Long number) {
BigDecimal square = BigDecimal.valueOf(number).multiply(BigDecimal.valueOf(number));
log.info("square of {} is {}", number, square);
return square;
}
}