Lijena inicijalizacija u proljetnom pokretanju 2
1. Pregled
U ovom uputstvu vidjet ćemo kako konfigurirati lijenu inicijalizaciju na razini aplikacije, počevši od Spring Boot 2.2
2. Lijena inicijalizacija
Prema zadanim postavkama u proljeće, svi definirani grahovi i njihove ovisnosti kreiraju se kada se kreira kontekst aplikacije.
Suprotno tome, kada konfiguriramo grah s lijenom inicijalizacijom, grah će se stvoriti i ubrizgati njegove ovisnosti kad jednom zatreba.
3. Ovisnost Mavena
Da bismo u našu aplikaciju dobili Spring Boot 2.2, moramo ga uključiti u svoju stazu predavanja.
S Mavenom možemo samo dodati opruga-čizma-starter ovisnost:
org.springframework.boot spring-boot-starter 2.2.2.OSLOBOĐENJE
4. Omogućite lijenu inicijalizaciju
Spring Boot 2.2 predstavlja proljeće.glavno.laza-inicijalizacija svojstvo, što olakšava konfiguriranje lijene inicijalizacije u cijeloj aplikaciji.
Postavljanje vrijednosti svojstva na pravi znači da će svi grah u aplikaciji koristiti lijenu inicijalizaciju.
Konfigurirajmo svojstvo u našem primjena.iml konfiguracijska datoteka:
proljeće: glavno: lijena-inicijalizacija: istina
Ili, ako je to slučaj, u našem primjena.svojstva datoteka:
spring.main.lazy-initialization = true
Ova konfiguracija utječe na sve grah u kontekstu. Dakle, ako želimo konfigurirati lijenu inicijalizaciju za određeni grah, to možemo učiniti putem @Lijen pristup.
Čak što više, možemo koristiti novo svojstvo, u kombinaciji s @Lijen napomena, postavljeno na lažno.
Ili drugim riječima, svi definirani grahovi koristit će lijenu inicijalizaciju, osim onih s kojima se izričito konfiguriramo @Lijeno (lažno).
5. Trči
Stvorimo jednostavnu uslugu koja će nam omogućiti da testiramo ono što smo upravo opisali.
Dodavanjem poruke u konstruktor, znat ćemo točno kada se grah stvara.
public class Writer {private final String writerId; javni pisac (String writerId) {this.writerId = writerId; System.out.println (writeId + "inicijalizirano !!!"); } public void write (String message) {System.out.println (writerId + ":" + message); }}
Također, kreirajmo SpringApplication i ubrizgavamo uslugu koju smo prije stvorili.
@SpringBootApplication javna klasa Application {@Bean ("writer1") public Writer getWriter1 () {return new Writer ("Writer 1"); } @Bean ("writer2") public Writer getWriter2 () {return new Writer ("Writer 2"); } javna statička void glavna (String [] args) {ApplicationContext ctx = SpringApplication.run (Application.class, args); System.out.println ("Inicijaliziran kontekst aplikacije !!!"); Writer Writer1 = ctx.getBean ("Writer1", Writer.class); writer1.write ("Prva poruka"); Writer Writer2 = ctx.getBean ("Writer2", Writer.class); writer2.write ("Druga poruka"); }}
Postavimo proljeće.glavno.laza-inicijalizacija vrijednost imovine do lažnoi pokrenite našu aplikaciju.
Writer 1 inicijaliziran !!! Writer 2 inicijaliziran !!! Inicijaliziran kontekst aplikacije !!! Writer 1: Prva poruka Writer 2: Druga poruka
Kao što vidimo, grah je stvoren kad se kontekst aplikacije pokrenuo.
Promijenimo sada vrijednost od proljeće.glavno.laza-inicijalizacija do pravii ponovno pokrenite našu aplikaciju.
Inicijaliziran kontekst aplikacije !!! Writer 1 inicijaliziran !!! Writer 1: Prva poruka Writer 2 inicijalizirana !!! Writer 2: Druga poruka
Kao rezultat toga, aplikacija nije stvorila grah u vrijeme pokretanja, već samo kada je trebala.
6. Učinci lijene inicijalizacije
Omogućavanje lijene inicijalizacije u cijeloj aplikaciji moglo bi proizvesti i pozitivne i negativne učinke.
Razgovarajmo o nekima od njih, kako su opisani u službenoj najavi nove funkcionalnosti:
- Lijena inicijalizacija može smanjiti broj graha stvorenih kad se aplikacija pokreće - dakle, možemo poboljšati vrijeme pokretanja prijave
- Kako se niti jedan grah ne stvara dok nije potreban, mogli bismo prikriti probleme, uzimajući ih u vrijeme izvođenja umjesto vremena pokretanja
- Problemi mogu obuhvaćati pogreške izvan memorije, pogrešne konfiguracije ili pogreške pronađene u definiciji klase
- Također, kada smo u web kontekstu, pokretanje stvaranja graha na zahtjev povećat će kašnjenje HTTP zahtjeva - stvaranje graha utjecati će samo na prvi zahtjev, ali to može imati negativan utjecaj na uravnoteženje opterećenja i automatsko skaliranje.
7. Zaključak
U ovom smo uputstvu konfigurirali lijenu inicijalizaciju s novim svojstvom spring.main.lazy-inicijalizacija, predstavljen u Spring Boot 2.2.
Kao i uvijek, izvorni kod za ovu lekciju dostupan je na GitHubu.