Skip to content

Commit 369655a

Browse files
pcoates33pivovarit
authored andcommitted
spring-boot ehcache example added (eugenp#6136)
1 parent 0fb2adf commit 369655a

File tree

6 files changed

+54
-69
lines changed

6 files changed

+54
-69
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,10 @@
11
package com.baeldung.cachetest.config;
22

3-
import java.math.BigDecimal;
4-
import java.time.Duration;
5-
6-
import javax.cache.CacheManager;
7-
8-
import org.ehcache.config.CacheConfiguration;
9-
import org.ehcache.config.ResourcePools;
10-
import org.ehcache.config.builders.CacheConfigurationBuilder;
11-
import org.ehcache.config.builders.CacheEventListenerConfigurationBuilder;
12-
import org.ehcache.config.builders.ExpiryPolicyBuilder;
13-
import org.ehcache.config.builders.ResourcePoolsBuilder;
14-
import org.ehcache.config.units.EntryUnit;
15-
import org.ehcache.config.units.MemoryUnit;
16-
import org.ehcache.event.EventType;
17-
import org.ehcache.jsr107.Eh107Configuration;
18-
import org.springframework.boot.autoconfigure.cache.JCacheManagerCustomizer;
193
import org.springframework.cache.annotation.EnableCaching;
20-
import org.springframework.context.annotation.Bean;
214
import org.springframework.context.annotation.Configuration;
225

236
@Configuration
247
@EnableCaching
258
public class CacheConfig {
26-
27-
private static final int ON_HEAP_CACHE_SIZE_ENTRIES = 2;
28-
private static final int OFF_HEAP_CACHE_SIZE_MB = 10;
29-
private static final int CACHE_EXPIRY_SECONDS = 30;
30-
31-
@Bean
32-
public JCacheManagerCustomizer jcacheManagerCustomizer() {
33-
return new JCacheManagerCustomizer() {
34-
35-
@Override
36-
public void customize(CacheManager cacheManager) {
37-
ResourcePools resourcePools = ResourcePoolsBuilder.newResourcePoolsBuilder()
38-
.heap(ON_HEAP_CACHE_SIZE_ENTRIES, EntryUnit.ENTRIES)
39-
.offheap(OFF_HEAP_CACHE_SIZE_MB, MemoryUnit.MB).build();
40-
41-
CacheEventListenerConfigurationBuilder eventLoggerConfig = CacheEventListenerConfigurationBuilder
42-
.newEventListenerConfiguration(new CacheEventLogger(), EventType.CREATED, EventType.EXPIRED)
43-
.unordered().asynchronous();
44-
45-
CacheConfiguration<?, ?> cacheConfiguration = CacheConfigurationBuilder
46-
.newCacheConfigurationBuilder(Long.class, BigDecimal.class, resourcePools)
47-
.withExpiry(ExpiryPolicyBuilder.timeToLiveExpiration(Duration.ofSeconds(CACHE_EXPIRY_SECONDS)))
48-
.add(eventLoggerConfig).build();
49-
50-
cacheManager.createCache("squareCache",
51-
Eh107Configuration.fromEhcacheCacheConfiguration(cacheConfiguration));
52-
53-
}
54-
};
55-
}
56-
9+
5710
}

spring-ehcache/src/main/java/com/baeldung/cachetest/config/CacheEventLogger.java

+5-6
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,11 @@
77

88
public class CacheEventLogger implements CacheEventListener<Object, Object> {
99

10-
private static final Logger log = LoggerFactory.getLogger(CacheEventLogger.class);
10+
private static final Logger log = LoggerFactory.getLogger(CacheEventLogger.class);
1111

12-
@Override
13-
public void onEvent(CacheEvent<? extends Object, ? extends Object> cacheEvent) {
14-
log.info("Cache event {} for item with key {}. Old value = {}, New value = {}", cacheEvent.getType(),
15-
cacheEvent.getKey(), cacheEvent.getOldValue(), cacheEvent.getNewValue());
16-
}
12+
@Override
13+
public void onEvent(CacheEvent<? extends Object, ? extends Object> cacheEvent) {
14+
log.info("Cache event {} for item with key {}. Old value = {}, New value = {}", cacheEvent.getType(), cacheEvent.getKey(), cacheEvent.getOldValue(), cacheEvent.getNewValue());
15+
}
1716

1817
}

spring-ehcache/src/main/java/com/baeldung/cachetest/rest/NumberController.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@
1515
@RequestMapping(path = "/number", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
1616
public class NumberController {
1717

18-
private final static Logger log = LoggerFactory.getLogger(NumberController.class);
18+
private final static Logger log = LoggerFactory.getLogger(NumberController.class);
1919

20-
@Autowired
21-
private NumberService numberService;
20+
@Autowired
21+
private NumberService numberService;
2222

23-
@GetMapping(path = "/square/{number}")
24-
public String getThing(@PathVariable Long number) {
25-
log.info("call numberService to square {}", number);
26-
return String.format("{\"square\": %s}", numberService.square(number));
27-
}
23+
@GetMapping(path = "/square/{number}")
24+
public String getThing(@PathVariable Long number) {
25+
log.info("call numberService to square {}", number);
26+
return String.format("{\"square\": %s}", numberService.square(number));
27+
}
2828

2929
}

spring-ehcache/src/main/java/com/baeldung/cachetest/service/NumberService.java

+8-7
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@
1010
@Service
1111
public class NumberService {
1212

13-
private final static Logger log = LoggerFactory.getLogger(NumberService.class);
13+
private final static Logger log = LoggerFactory.getLogger(NumberService.class);
1414

15-
@Cacheable(value = "squareCache", key = "#number", condition = "#number>10")
16-
public BigDecimal square(Long number) {
17-
BigDecimal square = BigDecimal.valueOf(number).multiply(BigDecimal.valueOf(number));
18-
log.info("square of {} is {}", number, square);
19-
return square;
20-
}
15+
@Cacheable(value = "squareCache", key = "#number", condition = "#number>10")
16+
public BigDecimal square(Long number) {
17+
BigDecimal square = BigDecimal.valueOf(number)
18+
.multiply(BigDecimal.valueOf(number));
19+
log.info("square of {} is {}", number, square);
20+
return square;
21+
}
2122

2223
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
spring.cache.jcache.config=classpath:ehcache.xml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2+
xmlns="http://www.ehcache.org/v3"
3+
xmlns:jsr107="http://www.ehcache.org/v3/jsr107"
4+
xsi:schemaLocation="
5+
http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.0.xsd
6+
http://www.ehcache.org/v3/jsr107 http://www.ehcache.org/schema/ehcache-107-ext-3.0.xsd">
7+
8+
<cache alias="squareCache">
9+
<key-type>java.lang.Long</key-type>
10+
<value-type>java.math.BigDecimal</value-type>
11+
<expiry>
12+
<ttl unit="seconds">30</ttl>
13+
</expiry>
14+
15+
<listeners>
16+
<listener>
17+
<class>com.baeldung.cachetest.config.CacheEventLogger</class>
18+
<event-firing-mode>ASYNCHRONOUS</event-firing-mode>
19+
<event-ordering-mode>UNORDERED</event-ordering-mode>
20+
<events-to-fire-on>CREATED</events-to-fire-on>
21+
<events-to-fire-on>EXPIRED</events-to-fire-on>
22+
</listener>
23+
</listeners>
24+
25+
<resources>
26+
<heap unit="entries">2</heap>
27+
<offheap unit="MB">10</offheap>
28+
</resources>
29+
</cache>
30+
31+
</config>

0 commit comments

Comments
 (0)