Spring Boot Ehcache Eksempel

1. Oversikt

La oss se på et eksempel på bruk av Ehcache med Spring Boot. Vi bruker Ehcache versjon 3 da dette gir en implementering av en JSR-107 cache manager.

Eksemplet er en enkel REST-tjeneste som produserer kvadratet til et tall.

2. Avhengigheter

 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

La oss lage en enkel REST-kontroller som kaller en tjeneste for å firkantet et tall og returnerer resultatet som en JSON-streng:

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

La oss nå opprette tjenesten.

Vi kommenterer metoden med @Cacheable slik at våren vil håndtere caching. Som et resultat av denne merknaden vil Spring opprette en fullmakt for NumberService å avskjære samtaler til torget metode og ring Ehcache.

Vi må oppgi navnet på hurtigbufferen og eventuelt nøkkelen. Vi kan også legge til en betingelse for å begrense det som er hurtigbufret:

@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 ("kvadrat av {} er {}", tall, kvadrat); retur firkant; }}

Til slutt, la oss lage vår viktigste Spring Boot-applikasjon:

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

4. Cache-konfigurasjon

Vi må legge til vårens @EnableCaching merknad til en vårbønne slik at vårens merkedrevne cacheadministrasjon er aktivert.

La oss lage en CacheConfig klasse:

@Configuration @EnableCaching offentlig klasse CacheConfig {}

Vårens autokonfigurasjon finner Ehcaches implementering av JSR-107. Imidlertid er ingen cacher opprettet som standard.

Fordi verken Spring eller Ehcache ser etter standard ehcache.xml fil. Vi legger til følgende eiendom for å fortelle Spring hvor du finner den:

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

La oss lage en ehcache.xml fil med hurtigbuffer kalt squareCache:

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

Og la oss også legge til cache-hendelseslytteren som logger begge deler OPPRETT og UTLØPT cache-hendelser:

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

5. I aksjon

Vi kan bruke Maven til å starte denne appen ved å kjøre mvn spring-boot: run.

Åpne deretter en nettleser og få tilgang til REST-tjenesten på port 8080.

Hvis vi går til // localhost: 8080 / nummer / kvadrat / 12, så kommer vi tilbake {“Firkant”: 144}, og i loggen 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: Cache-hendelse OPPRETT for element med nøkkel 12. Gammel verdi = null, Ny verdi = 144

Vi kan se loggmeldingen fra torget Metode av NumberService, og OPPRETT hendelse fra EventLogger. Hvis vi deretter oppdaterer nettleseren, ser vi bare følgende lagt til i loggen:

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

Loggmeldingen i torget Metode av NumberService blir ikke påkalt. Dette viser oss at den bufrede verdien blir brukt.

Hvis vi venter i 30 sekunder på at hurtigbufret element utløper og oppdaterer nettleseren, ser vi en UTLØPT begivenhet, og verdien lagt til i hurtigbufferen:

INFO [nio-8080-exec-1] (...) NumberController: call numberService to square 12 INFO [e [_default _] - 1] (...) CacheEventLogger: Cache event EXPIRED for item with key 12. Old value = 144, Ny verdi = null INFO [nio-8080-exec-1] (...) NumberService: kvadrat på 12 er 144 INFO [e [_default _] - 1] (...) CacheEventLogger: Cache-hendelse OPPRETT for vare med nøkkel 12. Gammel verdi = null, Ny verdi = 144

Hvis vi kommer inn // localhost: 8080 / nummer / kvadrat / 3 i nettleseren får vi riktig svar på 9, men verdien er ikke hurtigbufret.

Dette er på grunn av tilstanden vi brukte på @Cacheable kommentar til bare cacheverdier for tall som er høyere enn 10.

6. Konklusjon

I denne raske opplæringen viste vi hvordan du setter opp Ehcache med Spring Boot.

Som alltid kan koden bli funnet på GitHub.


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