Proprietăți de cu Primăvară și Primăvara Boot

Proprietăți de cu Primăvară și Primăvara Boot

Prezentare

Acest tutorial vă va arăta cum să înființeze și să utilizeze proprietăți în Primăvară, prin intermediul Java configurare și @PropertySource.

vom vedea, de asemenea, cum funcționează proprietățile în Boot-ul de primăvară.

Lectură suplimentară:

Spring Expression Language Guide

acest articol explorează Spring Expression Language (SpEL), un limbaj puternic de Expresie care acceptă interogarea și manipularea graficelor obiectelor în timpul rulării.,
Read more →

configurați o aplicație web de pornire de primăvară

unele dintre configurările mai utile pentru o aplicație de pornire de primăvară.
Read more →

Ghid pentru @ConfigurationProperties în Primăvară Boot

Un mod rapid și practic ghid pentru @ConfigurationProperties adnotare în Primăvară Boot.
Read more →

Înregistra un Fișier de Proprietăți prin Adnotări

Primavara 3.1 introduce, de asemenea, noi @PropertySource adnotare ca un mecanism convenabil pentru adăugarea de proprietate surse pentru mediu.,

putem folosi această adnotare în colaborare cu @Configurare adnotare:

@Configuration@PropertySource("classpath:foo.properties")public class PropertiesWithJavaConfig { //...}

un Alt mod foarte util pentru a înregistra un nou fișier de proprietăți este folosind un substituent, care ne permite să dinamic selectați fișierul corect la runtime:

@PropertySource({ "classpath:persistence-${envTarget:mysql}.properties"})...

2.1. Definirea mai multor locații de proprietate

adnotarea @PropertySource este repetabilă în conformitate cu convențiile Java 8., Prin urmare, dacă suntem folosind Java 8 sau mai mare, putem folosi această adnotare pentru a defini mai multe locații de proprietate:

desigur, putem folosi, de asemenea, @PropertySources adnotare și de a specifica o matrice de @PropertySource. Aceasta funcționează în orice versiune Java acceptată, nu doar în Java 8 sau mai mare:

în ambele cazuri, este de remarcat faptul că, în cazul unei coliziuni nume de proprietate, ultima citire sursă are prioritate.,

Utilizarea/Injectarea Proprietăți

Injectarea de o proprietate cu @Valoarea de adnotare este simplă:

@Value( "${jdbc.url}" )private String jdbcUrl;

de asemenea, putem specifica o valoare implicită pentru proprietatea:

@Value( "${jdbc.url:aDefaultUrl}" )private String jdbcUrl;

noul PropertySourcesPlaceholderConfigurer adăugat în Primăvară 3.1 rezolva ${…} substituenți în termen de fasole definiție valorile de proprietate și @Valoarea adnotări.,

în cele din Urmă, putem obține valoarea unei proprietăți folosind Mediul API:

@Autowiredprivate Environment env;...dataSource.setUrl(env.getProperty("jdbc.url"));

Properties Cu Spring Boot

Înainte de a intra în mai multe opțiuni de configurare avansate pentru proprietăți, să-și petreacă ceva timp în căutarea la noi proprietăți de sprijin în Primăvară Boot.în general, acest nou suport implică o configurație mai mică în comparație cu arcul standard, care este, desigur, unul dintre obiectivele principale ale Boot-ului.

4. 1. cerere.,proprietăți: fișierul de proprietate implicit

Boot aplică Convenția tipică asupra abordării de configurare a fișierelor de proprietate. Aceasta înseamnă că putem pune pur și simplu o aplicație.fișier de proprietăți în directorul nostru src / main / resources și va fi detectat automat. Putem apoi injecta orice proprietăți încărcate din acesta în mod normal.

deci, folosind acest fișier implicit, nu trebuie să înregistrăm în mod explicit o sursă de proprietate sau chiar să furnizăm o cale către un fișier de proprietate.,

putem configura, de asemenea, un fișier diferit în timpul rulării, dacă este necesar, folosind o proprietate de mediu:

java -jar app.jar --spring.config.location=classpath:/another-location.properties

începând cu Spring Boot 2.3, putem specifica, de asemenea, locații wildcard pentru fișierele de configurare.de exemplu, putem seta arcul.config.proprietatea locației pentru config/*/:

java -jar app.jar --spring.config.location=config/*/

În acest fel, Spring Boot va căuta fișiere de configurare care se potrivesc cu modelul de director config / * / în afara fișierului nostru jar. Acest lucru vine la îndemână atunci când avem mai multe surse de proprietăți de configurare.

de la versiunea 2.4.,0, Spring Boot acceptă utilizarea fișierelor de proprietăți multi-document, la fel ca YAML prin design:

baeldung.customProperty=defaultValue#---baeldung.customProperty=overriddenValue

rețineți că pentru fișierele de proprietăți, notația cu trei liniuțe este precedată de un caracter de comentariu (#).

4. 2. Fișier de proprietăți specifice mediului

dacă trebuie să vizăm diferite medii, există un mecanism încorporat pentru asta în Boot.

putem defini pur și simplu o aplicație-mediu.fișier de proprietăți în directorul src / main / resources, apoi setați un profil de primăvară cu același nume de mediu.,

de exemplu, dacă definim un mediu „stadializare”, înseamnă că va trebui să definim un profil de stadializare și apoi stadializare aplicație.proprietăți.

acest fișier env va fi încărcat și va avea prioritate față de fișierul de proprietate implicit. Rețineți că fișierul implicit va fi încă încărcat, doar că atunci când există o coliziune de proprietate, fișierul de proprietate specific mediului are prioritate.

4. 3. Test specific Fișier Proprietăți

s-ar putea avea, de asemenea, o cerință de a utiliza valori diferite de proprietate atunci când aplicația noastră este în curs de testare.,

Spring Boot se ocupă de acest lucru pentru noi, căutând în directorul nostru src/test / resources în timpul unui test. Din nou, proprietățile implicite vor fi în continuare injectabile la fel de normal, dar vor fi suprascrise de acestea dacă există o coliziune.

4. 4. Adnotarea @TestPropertySource

dacă avem nevoie de un control mai granular asupra proprietăților testului, atunci putem folosi adnotarea @TestPropertySource.,

Acest lucru ne permite să setați test de proprietăți pentru un anumit test de context, care prevalează asupra default proprietate surse:

Dacă nu doriți să utilizați un fișier, putem specifica numele și direct valorile:

de asemenea, putem obține un efect similar, folosind proprietățile argument al @SpringBootTest adnotare:

4.5. Proprietăți ierarhice

dacă avem proprietăți care sunt grupate împreună, putem folosi adnotarea @ConfigurationProperties, care va mapa aceste ierarhii de proprietăți în graficele obiectelor Java.,

Să luăm unele proprietăți utilizate pentru a configura o conexiune la baza de date:

database.url=jdbc:postgresql:/localhost:5432/instancedatabase.username=foodatabase.password=bar

Și apoi să utilizați adnotare pentru a le harta pentru un obiect bază de date:

Spring Boot se aplică convenția asupra configurației abordare din nou, în mod automat mapare între proprietate nume și câmpurile corespunzătoare. Tot ce trebuie să furnizăm este prefixul proprietății.dacă doriți să săpați mai adânc în proprietățile de configurare, aruncați o privire la articolul nostru aprofundat.

4. 6. Alternativă: YAML Files

Spring acceptă, de asemenea, fișiere YAML.,

toate aceleași reguli de denumire se aplică pentru fișierele de proprietate specifice testului, specifice mediului și implicite. Singura diferență este extensia de fișier și o dependență de Biblioteca SnakeYAML fiind pe calea noastră de clasă.,

YAML este deosebit de bun pentru ierarhic proprietate de stocare; următoarele proprietăți fișier:

database.url=jdbc:postgresql:/localhost:5432/instancedatabase.username=foodatabase.password=barsecret: foo

este sinonim cu următoarele YAML:

database: url: jdbc:postgresql:/localhost:5432/instance username: foo password: barsecret: foo

este, de asemenea, demn de menționat faptul că YAML fișiere nu acceptă @PropertySource adnotare, deci, dacă avem nevoie pentru a utiliza această adnotare, s-ar constrânge să ne folosind un fișier de proprietăți.un alt punct remarcabil este faptul că, în versiunea 2.4.0 boot de primăvară a schimbat modul în care proprietățile sunt încărcate din fișiere YAML multi-document., Anterior, ordinea în care au fost adăugate se baza pe ordinea de activare a profilului. Cu noua versiune, însă, cadrul respectă aceleași reguli de comandă pe care le-am indicat anterior .proprietăți fișiere; proprietăți declarate mai mici în fișierul va suprascrie pur și simplu cele mai mari în sus.în plus, în această versiune profilurile nu mai pot fi activate din documente specifice profilului, ceea ce face rezultatul mai clar și mai previzibil.

4. 7. Importarea fișierelor de configurare suplimentare

înainte de versiunea 2.4.,0, boot de primăvară permis inclusiv fișiere de configurare suplimentare folosind arcul.config.locație și primăvară.config.proprietăți suplimentare-locație, dar au avut anumite limitări. De exemplu, au trebuit să fie definite înainte de a începe aplicația (ca proprietăți de mediu sau de sistem sau folosind argumente în linia de comandă), așa cum au fost utilizate la începutul procesului.în versiunea menționată, putem folosi arcul.config.importați proprietatea în cadrul aplicației.Proprietăți sau aplicații.fișier yml pentru a include cu ușurință fișiere suplimentare., Această proprietate acceptă unele caracteristici interesante:

  • adăugarea de mai multe fișiere sau directoare
  • fișierele pot fi încărcate fie de clase sau de la o sursă externă de director
  • care indică dacă procesul de pornire ar trebui să eșueze dacă un fișier nu este găsit, sau dacă este un fișier opțional
  • importul extensionless fișiere

Să vedem un exemplu valabil:

Notă: aici am formatat această proprietate folosind pauze de linie doar pentru claritate.

Spring va trata importurile ca pe un nou document introdus imediat sub declarația de import.

4. 8., Proprietăți De Argumente în Linia de Comandă

în Afară de folosind fișiere, putem trece proprietăți direct pe linia de comandă:

java -jar app.jar --property="value"

de asemenea, putem face acest lucru prin intermediul sistemului de proprietăți, care sunt furnizate înainte de -borcan de comandă, mai degrabă decât după acesta:

java -Dproperty.name="value" -jar app.jar

4.9. Proprietățile variabilelor de mediu

Spring Boot va detecta, de asemenea, variabilele de mediu, tratându-le ca proprietăți:

export name=valuejava -jar app.jar

4.10., Randomizare de Valori de Proprietate

Dacă nu vrem determinist valorile de proprietate, putem folosi RandomValuePropertySource la intamplare valori de proprietăți:

random.number=${random.int}random.long=${random.long}random.uuid=${random.uuid}

4.11. Tipuri suplimentare de surse de proprietate

Spring Boot suportă o multitudine de surse de proprietate, implementând o ordonare bine gândită pentru a permite o prioritate sensibilă. Merită consultat documentația oficială, care depășește domeniul de aplicare al acestui articol.,

configurare folosind boabe crude-PropertySourcesPlaceholderConfigurer

pe lângă metodele convenabile de a obține proprietăți în primăvară, putem defini și regiter bob de configurare a proprietății manual.

lucrul cu PropertySourcesPlaceholderConfigurer ne oferă un control deplin asupra configurației, cu dezavantajul de a fi mai verbose și de cele mai multe ori, inutile.,

Să vedem cum putem defini această fasole folosind configurația Java:

proprietăți în contexte părinte-copil

această întrebare apare din nou și din nou: ce se întâmplă când aplicația noastră web are un context părinte și un copil? Contextul părinte poate avea unele funcționalități comune de bază și fasole, și apoi unul (sau mai multe) contexte copil, poate conține fasole servlet specifice.

în acest caz, care este cel mai bun mod de a defini fișierele de proprietăți și de a le include în aceste contexte? Și cum să recuperați cel mai bine aceste proprietăți din primăvară?

vom da o defalcare simplă.,

Dacă fișierul este definit în contextul părinte:

  • @Value funcționează în contextul copil: da
  • @Value funcționează în contextul părinte: da
  • mediu.getProperty în contextul copilului: da
  • mediu.getProperty în contextul părinte: da

Dacă fișierul este definit în contextul copil:

  • @Value funcționează în contextul copil: da
  • @Value funcționează în contextul părinte: nu
  • mediu.getProperty în contextul copilului: da
  • mediu.,getProperty în contextul părinte: nu

concluzie

Acest articol a arătat mai multe exemple de lucru cu proprietăți și proprietăți fișiere în primăvară.ca întotdeauna, întregul cod care susține articolul este disponibil pe GitHub.

începeți cu arc 5 și Primăvara Boot 2, prin Învețe Primăvară curs:

>> CURSUL

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *