Spring Boot Ehcache Eksempel

1. Oversigt

Lad os se på et eksempel på brug af Ehcache med Spring Boot. Vi bruger Ehcache version 3, da dette giver en implementering af en JSR-107 cache manager.

Eksemplet er en simpel REST-tjeneste, der producerer kvadratet af et tal.

2. Afhængigheder

 org.springframework.boot spring-boot-starter-web 2.2.2.RELEASE org.springframework.boot spring-boot-starter-cache 2.2.2.RELEASE javax.cache cache-api 1.1.1 org.ehcache ehcache 3.8.1 
  • spring-boot-starter-web
  • spring-boot-starter-cache
  • javax.cache: cache-api
  • org.ehcache: ehcache

3. Eksempel

Lad os oprette en simpel REST-controller, der kalder en tjeneste for at kvadratere et tal og returnere resultatet som en JSON-streng:

@RestController @RequestMapping ("/ nummer", MediaType.APPLICATION_JSON_UTF8_VALUE) offentlig klasse NumberController {// ... @Autowired private NumberService numberService; @GetMapping (sti = "/ firkant / {nummer}") offentlig String getSquare (@PathVariable langt nummer) {log.info ("call numberService to square {}", nummer); returner String.format ("{\" firkant \ ":% s}", numberService.square (nummer)); }}

Lad os nu oprette tjenesten.

Vi kommenterer metoden med @Cacheable så foråret håndterer cachen. Som et resultat af denne kommentar opretter Spring en proxy for NumberService at aflytte opkald til firkant metode og kalde Ehcache.

Vi skal angive navnet på den cache, der skal bruges, og eventuelt nøglen. Vi kan også tilføje en betingelse for at begrænse, hvad der er cache:

@Service public class NumberService {// ... @Cacheable (value = "squareCache", key = "#number", condition = "#number> 10") public BigDecimal square (Long number) {BigDecimal square = BigDecimal.valueOf (nummer) .multiply (BigDecimal.valueOf (nummer)); log.info ("firkant af {} er {}", antal, firkant); returplads }}

Lad os endelig oprette vores primære Spring Boot-applikation:

@SpringBootApplication public class Application {public static void main (String [] args) {SpringApplication.run (Application.class, args); }}

4. Cache-konfiguration

Vi er nødt til at tilføje Spring's @EnableCaching kommentar til en Spring bønne, så Spring's annoteringsdrevne cacheadministration er aktiveret.

Lad os oprette en CacheConfig klasse:

@Configuration @EnableCaching offentlig klasse CacheConfig {}

Spring's auto-konfiguration finder Ehcache's implementering af JSR-107. Der oprettes dog ikke cacher som standard.

Fordi hverken Spring eller Ehcache ser efter en standard ehcache.xml fil. Vi tilføjer følgende egenskab for at fortælle Spring, hvor den skal findes:

spring.cache.jcache.config = klassesti: ehcache.xml 

Lad os oprette en ehcache.xml fil med en cache kaldet squareCache:

  java.lang.Long java.math.BigDecimal 30 com.baeldung.cachetest.config.CacheEventLogger ASYNCHRONOUS UNORDERED CREATED EXPIRED 2 10 

Og lad os også tilføje cache-begivenhedslytteren, der logger begge OPRETTET og UDLØBT cache-begivenheder:

offentlig klasse CacheEventLogger implementerer CacheEventListener {// ... @ Override public void onEvent (CacheEvent cacheEvent) {log.info (/ * message * /, cacheEvent.getKey (), cacheEvent.getOldValue (), cacheEvent.getNewValue ()); }}

5. I aktion

Vi kan bruge Maven til at starte denne app ved at køre mvn spring-boot: løb.

Åbn derefter en browser, og få adgang til REST-tjenesten på port 8080.

Hvis vi går til // localhost: 8080 / nummer / firkant / 12, så kommer vi tilbage {“Firkant”: 144}, og i logfilen ser vi:

INFO [nio-8080-exec-1] cbcachetest.rest.NumberController: call numberService to square 12 INFO [nio-8080-exec-1] cbcachetest.service.NumberService: square of 12 er 144 INFO [e [_default_] -0] cbcachetest.config.CacheEventLogger: Cachehændelse OPRET for element med nøgle 12. Gammel værdi = null, ny værdi = 144

Vi kan se logmeddelelsen fra firkant metode til NumberService, og OPRETTET begivenhed fra EventLogger. Hvis vi derefter opdaterer browseren, ser vi kun følgende tilføjet til loggen:

INFO [nio-8080-exec-2] c.b.cachetest.rest.NumberController: call numberService to square 12

Logbeskeden i firkant metode til NumberService påberåbes ikke. Dette viser os, at den cachelagrede værdi bruges.

Hvis vi venter 30 sekunder på, at det cachelagrede element udløber og opdaterer browseren, ser vi en UDLØBT begivenhed, og værdien tilføjet tilbage i cachen:

INFO [nio-8080-exec-1] (...) NumberController: call numberService til kvadrat 12 INFO [e [_default _] - 1] (...) CacheEventLogger: Cachehændelse UDLØBT for vare med nøgle 12. Gammel værdi = 144, Ny værdi = null INFO [nio-8080-exec-1] (...) NumberService: kvadrat på 12 er 144 INFO [e [_default _] - 1] (...) CacheEventLogger: Cache-begivenhed Oprettet til vare med tast 12. Gammel værdi = null, ny værdi = 144

Hvis vi kommer ind // localhost: 8080 / nummer / firkant / 3 i browseren får vi det rigtige svar på 9, men værdien caches ikke.

Dette skyldes den tilstand, vi brugte på @Cacheable kommentar til kun cache-værdier for tal højere end 10.

6. Konklusion

I denne hurtige vejledning viste vi, hvordan du opsætter Ehcache med Spring Boot.

Som altid kan koden findes på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found