Primjer proljetnog čizma Ehcache
1. Pregled
Pogledajmo primjer korištenja Ehcachea s Spring Bootom. Koristit ćemo Ehcache verzije 3 jer ovo pruža implementaciju upravitelja predmemorije JSR-107.
Primjer je jednostavna REST usluga koja daje kvadrat broja.
2. Ovisnosti
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
- proljeće-boot-starter-web
- predmemorija boot-starter-cache
- javax.cache: cache-api
- org.ehcache: ehcache
3. Primjer
Stvorimo jednostavni REST kontroler koji poziva uslugu da kvadrira broj i vrati rezultat kao JSON niz:
@RestController @RequestMapping ("/ number", MediaType.APPLICATION_JSON_UTF8_VALUE) javna klasa NumberController {// ... @Autowired private NumberService numberService; @GetMapping (path = "/ square / {number}") javni niz getSquare (@PathVariable Long number) {log.info ("call numberService to square {}", number); vrati String.format ("{\" kvadrat \ ":% s}", numberService.square (broj)); }}
Ajmo sada stvoriti uslugu.
Metodu bilježimo s @Cacheable tako da će se Spring nositi s predmemoriranjem. Kao rezultat ove napomene, Spring će stvoriti proxy za NumberService za presretanje poziva kvadrat metodu i pozovite Ehcache.
Moramo navesti ime predmemorije koju ćemo koristiti i po želji ključ. Također možemo dodati uvjet da ograničimo ono što je predmemorirano:
@Service javna klasa NumberService {// ... @Cacheable (value = "squareCache", key = "#number", condition = "#number> 10") javni BigDecimal kvadrat (Dugi broj) {BigDecimal square = BigDecimal.valueOf (broj) .multiply (BigDecimal.valueOf (number)); log.info ("kvadrat od {} je {}", broj, kvadrat); povratni kvadrat; }}
Na kraju, kreirajmo našu glavnu aplikaciju Spring Boot:
@SpringBootApplication javna klasa Application {public static void main (String [] args) {SpringApplication.run (Application.class, args); }}
4. Konfiguracija predmemorije
Moramo dodati Proljeće @EnableCaching napomena za proljetni grah tako da je omogućeno upravljanje predmemorijom vođeno bilješkama proljeća.
Stvorimo a CacheConfig razred:
@Configuration @EnableCaching javna klasa CacheConfig {}
Spring-ova automatska konfiguracija pronalazi Ehcacheovu implementaciju JSR-107. Međutim, prema zadanim postavkama nisu stvorene predmemorije.
Jer niti Spring niti Ehcache ne traže zadane postavke ehcache.xml datoteka. Dodamo sljedeće svojstvo kako bismo Springu rekli gdje ga može pronaći:
spring.cache.jcache.config = put staze: ehcache.xml
Stvorimo ehcache.xml datoteka s predmemorijom pod nazivom squareCache:
java.lang.Dugo java.math.BigDecimal 30 com.baeldung.cachetest.config.CacheEventLogger ASINHRONI NEUPRAVLJENI STVORENI ISTAKNUTI 2 10
A dodajmo i slušatelj događaja cache koji zapisuje oba STVORENO i ISTEKAO događaji iz predmemorije:
javna klasa CacheEventLogger implementira CacheEventListener {// ... @Override public void onEvent (CacheEvent cacheEvent) {log.info (/ * message * /, cacheEvent.getKey (), cacheEvent.getOldValue (), cacheEvent.getNewValue ()); }}
5. Na djelu
Maven možemo koristiti za pokretanje ove aplikacije pokretanjem mvn spring-boot: trčanje.
Zatim otvorite preglednik i pristupite usluzi REST na portu 8080.
Ako odemo u // localhost: 8080 / broj / kvadrat / 12, onda ćemo se vratiti {"Kvadrat": 144}, a u zapisniku ćemo vidjeti:
INFO [nio-8080-exec-1] cbcachetest.rest.NumberController: poziv brojaService do kvadrata 12 INFO [nio-8080-exec-1] cbcachetest.service.NumberService: kvadrat od 12 je 144 INFO [e [_default_] -0] cbcachetest.config.CacheEventLogger: Događaj predmemorije STVOREN za stavku s ključem 12. Stara vrijednost = nula, Nova vrijednost = 144
Poruku dnevnika možemo vidjeti s kvadrat metoda NumberService, i STVORENO događaj iz EventLogger. Ako zatim osvježimo preglednik, u zapisnik ćemo vidjeti samo sljedeće:
INFO [nio-8080-exec-2] c.b.cachetest.rest.NumberController: nazovite numberService do kvadrata 12
Poruka dnevnika u kvadrat metoda NumberService ne poziva se. To nam pokazuje da se koristi predmemorirana vrijednost.
Ako pričekamo 30 sekundi da predmemorirana stavka istekne i osvježimo preglednik, vidjet ćemo ISTEKAO događaj, i vrijednost dodana natrag u predmemoriju:
INFO [nio-8080-exec-1] (...) NumberController: pozovite numberService na kvadrat 12 INFO [e [_default _] - 1] (...) CacheEventLogger: Cache event EXPIRED for item with key 12. Old value = 144, Nova vrijednost = null INFO [nio-8080-exec-1] (...) NumberService: kvadrat od 12 je 144 INFO [e [_default _] - 1] (...) CacheEventLogger: Cache event CREATED for item with ključ 12. Stara vrijednost = null, Nova vrijednost = 144
Ako uđemo // localhost: 8080 / broj / kvadrat / 3 u preglednik dobivamo točan odgovor 9, ali vrijednost nije predmemorirana.
To je zbog stanja koje smo koristili na @Cacheable napomena samo za vrijednosti predmemorije za brojeve veće od 10.
6. Zaključak
U ovom smo brzom vodiču pokazali kako postaviti Ehcache s Spring Bootom.
Kao i uvijek, kod se može naći na GitHubu.