Tavaszi csomagtartó Ehcache példa

1. Áttekintés

Nézzünk meg egy példát az Ehcache használatára a Spring Boot alkalmazással. Az Ehcache 3. verzióját fogjuk használni, mivel ez biztosítja a JSR-107 gyorsítótár-kezelő megvalósítását.

A példa egy egyszerű REST szolgáltatás, amely előállítja egy szám négyzetét.

2. Függőségek

 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 
  • tavasz-boot-starter-web
  • spring-boot-starter-cache
  • javax.cache: cache-api
  • org.ehcache: ehcache

3. Példa

Hozzunk létre egy egyszerű REST vezérlőt, amely egy szolgáltatást hív egy szám négyzetére, és az eredményt JSON karakterláncként adja vissza:

@RestController @RequestMapping ("/ number", MediaType.APPLICATION_JSON_UTF8_VALUE) public class NumberController {// ... @Autowired private NumberService numberService; @GetMapping (path = "/ square / {number}") public String getSquare (@PathVariable Long number) {log.info ("call numberService to square {}", szám); return String.format ("{\" négyzet \ ":% s}", numberService.square (szám)); }}

Most hozzuk létre a szolgáltatást.

A módszerrel annotáljuk a módszert @Cache hogy Spring kezelje a gyorsítótárat. Ennek a jegyzetnek a eredményeként Spring létrehozza a NumberService hogy lehallgassák a négyzet módszer és hívja meg az Ehcache-t.

Meg kell adnunk a használni kívánt gyorsítótár nevét és opcionálisan a kulcsot. Feltételt is hozzáadhatunk a gyorsítótárban tárolt adatok korlátozásához:

@Service public class NumberService {// ... @Cacheable (value = "squareCache", key = "#number", condition = "#number> 10") public BigDecimal square (Long number) {BigDecimal square = BigDecimal.valueOf (szám) .többször (BigDecimal.valueOf (szám)); log.info ("{} négyzete {}", szám, négyzet); visszatérő tér; }}

Végül hozzuk létre a fő Spring Boot alkalmazást:

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

4. Gyorsítótár beállítása

Hozzá kell adnunk a tavaszit @EnableCaching annotáció egy tavaszi babhoz, hogy a Spring annotációval vezérelt gyorsítótár-kezelése engedélyezve legyen.

Hozzunk létre egy CacheConfig osztály:

@Configuration @EnableCaching public class CacheConfig {}

Spring automatikus konfigurációja megtalálja az Ehcache JSR-107 megvalósítását. Alapértelmezés szerint azonban nincsenek gyorsítótárak.

Mert sem Spring, sem Ehcache nem keres alapértelmezést ehcache.xml fájl. A következő tulajdonság hozzáadásával elmondhatjuk Springnek, hogy hol találja meg:

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

Hozzunk létre egy ehcache.xml fájlt nevű gyorsítótárral squareCache:

  java.lang.Long java.math.BigDecimal 30 com.baeldung.cachetest.config.CacheEventLogger ASZINKRONOS RENDELETT LÉTREHOZOTT 2 

És tegyük hozzá a cache eseményfigyelőt is, amely mindkettőt naplózza LÉTREHOZOTT és LEJÁRT gyorsítótár események:

public class CacheEventLogger implementálja a CacheEventListener {// ... @Orride public void onEvent (CacheEvent cacheEvent) {log.info (/ * message * /, cacheEvent.getKey (), cacheEvent.getOldValue (), cacheEvent.getNewValue ()); }}

5. Műveletben

A Maven segítségével futtatásával elindíthatjuk ezt az alkalmazást mvn spring-boot: fut.

Ezután nyissa meg a böngészőt, és nyissa meg a REST szolgáltatást a 8080-as porton.

Ha megyünk // localhost: 8080 / szám / négyzet / 12, majd visszajövünk {„Négyzet”: 144}, és a naplóban meglátjuk:

INFO [nio-8080-exec-1] cbcachetest.rest.NumberController: call numberService to 12 square INFO [nio-8080-exec-1] cbcachetest.service.NumberService: 12-es négyzet 144 INFO [e [_default_] -0] cbcachetest.config.CacheEventLogger: Gyorsítótár-esemény CREATED az elemhez a 12-es kulccsal. Régi érték = null, Új érték = 144

Láthatjuk a naplóüzenetet a négyzet a metódusa NumberService, és a LÉTREHOZOTT eseményt az EventLoggerből. Ha ezután frissítjük a böngészőt, akkor csak a következőket látjuk hozzá a naplóhoz:

INFO [nio-8080-exec-2] c.b.cachetest.rest.NumberController: hívószámSzolgáltatás a 12. négyzetig

A naplóüzenet a négyzet a metódusa NumberService nem hivatkoznak rá. Ez azt mutatja, hogy a gyorsítótárazott értéket használják.

Ha várunk 30 másodpercet a gyorsítótárazott elem lejártáig, és frissítjük a böngészőt, akkor egy LEJÁRT esemény, és a hozzáadott értéket vissza a gyorsítótárba:

INFO [nio-8080-exec-1] (...) Számvezérlő: hívószámSzolgáltatás a 12. négyzethez INFO [e [_default _] - 1] (...) CacheEventLogger: Gyorsítótár-esemény LEJÁRT a 12-es kulccsal rendelkező tételnél. Régi érték = 144, Új érték = null INFO [nio-8080-exec-1] (...) NumberService: a 12-es négyzet értéke 144 INFO [e [_default _] - 1] (...) CacheEventLogger: Cache-esemény CREATED kulcs 12. Régi érték = null, Új érték = 144

Ha belépünk // localhost: 8080 / szám / négyzet / 3 a böngészőbe a helyes 9-es választ kapjuk, de az érték nincs tárolva.

Ez annak az állapotnak köszönhető, amelyet a @Cache csak a 10-nél magasabb számok gyorsítótár-értékeinek jelölése.

6. Következtetés

Ebben a gyors bemutatóban megmutattuk, hogyan kell beállítani az Ehcache-t a Spring Boot segítségével.

Mint mindig, a kód megtalálható a GitHubon is.