Vlastnosti s Jarní a Jarní Boot

Vlastnosti s Jarní a Jarní Boot

Přehled

Tento tutoriál vám ukáže, jak nastavit a používat vlastnosti na Jaře přes Java konfigurace a @PropertySource.

uvidíme také, Jak vlastnosti fungují v Spring Boot.

Další čtení:

Jarní Výraz Jazykový Průvodce

Tento článek zkoumá Jarní Výraz Jazyk (SpEL), silný výraz, jazyk, který podporuje dotazování a manipulaci objektu grafů v runtime.,
Čtěte více →

Konfigurovat Spring Boot Web Aplikace

Některé z více užitečných konfigurační soubory pro Spring Boot aplikaci.
Přečtěte si více →

průvodce @ Configurationvlastnosti v jarním Bootu

rychlý a praktický průvodce anotací @Configuracevlastnosti v jarním Bootu.
Čtěte více →

Registrace Vlastnosti Souboru prostřednictvím Anotací

Jarní 3.1 také zavádí nový @PropertySource anotace jako výhodný mechanismus pro přidávání majetku zdrojů na životní prostředí.,

můžeme použít tento anotace ve spojení s @Konfigurace anotace:

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

Další velmi užitečný způsob, jak zaregistrovat nový soubor vlastností je použití zástupný znak, který nám umožňuje dynamicky vyberte správný soubor v runtime:

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

2.1. Definování více míst vlastností

anotace @PropertySource je opakovatelná podle konvencí Java 8., Proto, pokud budeme používat Java 8 nebo vyšší, můžeme použít tento anotace definovat více vlastností míst:

samozřejmě, můžeme také použít @PropertySources anotace a určit pole @PropertySource. To funguje v jakékoli podporované verzi Java, a to nejen v jazyce Java 8 nebo vyšší:

v obou případech stojí za zmínku, že v případě kolize názvů vlastností má přednost poslední čtení zdroje.,

Použití/Vstřikování Vlastnosti

Vstřikování majetku s @Hodnota anotace je jednoduchá:

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

můžeme také zadat výchozí hodnotu pro vlastnost:

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

nový PropertySourcesPlaceholderConfigurer přidáno na Jaře 3.1 řešení ${…} zástupné symboly v rámci bean definice majetkové hodnoty a @Hodnota popisy.,

a Konečně, můžeme získat hodnotu vlastnosti pomocí Prostředí API:

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

Vlastnosti S Jarní Boot

předtím, Než jsme se jít do další pokročilé možnosti konfigurace pro vlastnosti, pojďme strávit nějaký čas se podíváme na nové vlastnosti podpora ve Spring Boot.

Obecně řečeno, tato nová podpora zahrnuje méně konfigurace ve srovnání se standardní Jaře, což je samozřejmě jeden z hlavních cílů Boot.

4.1. aplikace.,vlastnosti: výchozí soubor vlastností

Boot používá svou typickou konvenci nad konfiguračním přístupem k souborům vlastností. To znamená, že můžeme jednoduše dát aplikaci.soubor vlastností v našem adresáři src/main/resources a bude automaticky detekován. Pak z něj můžeme aplikovat všechny načtené vlastnosti jako obvykle.

takže pomocí tohoto výchozího souboru nemusíme explicitně registrovat PropertySource nebo dokonce poskytnout cestu k souboru vlastností.,

můžeme také nakonfigurovat jiný soubor za běhu, pokud potřebujeme, pomocí vlastnosti prostředí:

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

od Spring Boot 2.3 můžeme také určit zástupné umístění konfiguračních souborů.

například můžeme nastavit pružinu.konfigurace.umístění nemovitosti config/*/:

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

Tímto způsobem, Spring Boot bude hledat konfigurační soubory odpovídající config/*/ adresáře vzor mimo naši jar soubor. To se hodí, když máme více zdrojů konfiguračních vlastností.

od verze 2.4.,0, Spring Boot podporuje použití multi-vlastnosti dokumentu soubory, podobně jako YAML dělá design:

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

Všimněte si, že pro vlastnosti souborů, tři pomlčky zápisu předchází znak komentáře (#).

4.2. Soubor vlastností specifických pro životní prostředí

pokud potřebujeme zacílit na různá prostředí, je pro to v Bootu vestavěný mechanismus.

můžeme jednoduše definovat aplikační prostředí.soubor vlastností v adresáři src / main / resources a poté nastavte profil pružiny se stejným názvem prostředí.,

například, pokud definujeme prostředí „staging“, znamená to, že budeme muset definovat profil stagingu a poté staging aplikace.vlastnost.

Tento soubor env bude načten a bude mít přednost před výchozím souborem vlastností. Všimněte si, že výchozí soubor bude stále být naloženo, je to jen, že když tam je vlastnost kolize, životní prostředí-konkrétní vlastnosti souboru má přednost.

4. 3. Test-Specific properties File

můžeme mít také požadavek na použití různých hodnot vlastností, když je naše aplikace testována.,

Spring Boot zpracovává to pro nás tím, že hledá v našem src / test / resources adresáře během zkušebního běhu. Opět, výchozí vlastnosti budou stále injekčních jako normální, ale bude přepsána, pokud je kolize.

4.4. Anotace @TestPropertySource

pokud potřebujeme podrobnější kontrolu nad testovacími vlastnostmi, můžeme použít anotaci @TestPropertySource.,

To nám umožňuje nastavit vlastnosti test pro specifický test kontextu, přičemž přednost před výchozí vlastnost zdroje:

Pokud nechceme použít soubor, můžeme určit názvy a hodnoty přímo:

můžeme také dosáhnout podobného účinku pomocí vlastnosti argument @SpringBootTest anotace:

4.5. Hierarchické Vlastnosti

Pokud máme vlastnosti, které jsou seskupeny dohromady, můžeme využít @ConfigurationProperties anotace, která bude mapovat tyto nemovitosti hierarchie do Java objektů, grafy.,

vezměme si, že některé vlastnosti se používá ke konfiguraci připojení k databázi:

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

A pak použijeme anotaci na mapě je do databáze objekt:

Jarní Boot platí, že je to konvence nad konfigurací přístup znovu, automaticky mapování mezi názvy vlastností a jejich odpovídajících polí. Vše, co musíme dodat, je předpona vlastností.

Pokud se chcete hlouběji zabývat konfiguračními vlastnostmi, podívejte se na náš podrobný článek.

4.6. Alternativa: YAML soubory

jaro také podporuje YAML soubory.,

všechna stejná pravidla pro pojmenování platí pro soubory specifické pro test, specifické pro životní prostředí a výchozí vlastnosti. Jediným rozdílem je přípona souboru a závislost na knihovně SnakeYAML na naší classpath.,

YAML je zvláště dobré pro hierarchické majetku skladování; následující nemovitost souboru:

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

je synonymem pro následující YAML souboru:

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

je To také stojí za zmínku, že YAML soubory nepodporují @PropertySource anotace, takže pokud potřebujeme použít tento anotace, to by omezovat, abychom pomocí vlastnosti file.

dalším pozoruhodným bodem je, že ve verzi 2.4.0 Spring Boot změnil způsob, jakým jsou vlastnosti načteny ze souborů YAML s více dokumenty., Dříve byl pořadí, ve kterém byly přidány, založeno na pořadí aktivace profilu. U nové verze se však rámec řídí stejnými pravidly objednávání, pro která jsme již dříve uvedli.vlastnosti soubory; vlastnosti deklarované nižší v souboru bude jednoduše přepsat ty vyšší nahoru.

navíc v této verzi již nelze profily aktivovat z dokumentů specifických pro profil, takže výsledek je jasnější a předvídatelnější.

4.7. Import dalších konfiguračních souborů

před verzí 2.4.,0, jarní Boot povoleno včetně dalších konfiguračních souborů pomocí pružiny.konfigurace.místo a jaro.konfigurace.další-umístění vlastnosti, ale oni měli určitá omezení. Například musely být definovány před spuštěním aplikace (jako vlastnosti prostředí nebo systému nebo pomocí argumentů příkazového řádku), protože byly použity na začátku procesu.

ve zmíněné verzi můžeme použít pružinu.konfigurace.import nemovitosti v rámci aplikace.Vlastnosti nebo aplikace.YML soubor snadno obsahovat další soubory., Tato vlastnost podporuje některé zajímavé vlastnosti:

  • přidání několika souborů nebo adresářů
  • soubory lze načíst buď z classpath nebo z externího adresáře
  • označující, zda je spouštěcí proces by měl selhat, pokud soubor není nalezen nebo pokud je volitelný soubor
  • import adresou soubory

podívejme se na platný příklad:

Poznámka: zde jsme formátovaný tato vlastnost pomocí zalomení řádku jen pro přehlednost.

jaro bude považovat dovoz za nový dokument vložený bezprostředně pod dovozní prohlášení.

4.8., Vlastnosti Z Příkazového Řádku Argumenty

Kromě použití souborů, můžeme předat vlastnosti přímo na příkazovém řádku:

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

můžeme to udělat také pomocí vlastnosti systému, které jsou poskytovány před -jar příkaz spíše než po tom:

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

4.9. Vlastnosti Z Proměnné Prostředí

Jarní Boot bude také detekovat proměnné prostředí, zacházet s nimi jako vlastnosti:

export name=valuejava -jar app.jar

4.10., Randomizace Majetkových Hodnot

Pokud nechceme determinista majetkové hodnoty, můžeme použít RandomValuePropertySource náhodně hodnoty vlastností:

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

4.11. Další Druhy Majetku Zdroje

Jarní Boot podporuje velké množství majetku, zdrojů, realizaci dobře-myslel-out objednání umožnit rozumné převažující. Stojí za to konzultovat oficiální dokumentaci, která jde dále než rozsah tohoto článku.,

Konfigurace Pomocí Syrové Fazole — PropertySourcesPlaceholderConfigurer

Kromě vhodné metody získávání vlastnosti na Jaře, můžeme také definovat a regiter vlastnost konfigurace bean ručně.

Práce s PropertySourcesPlaceholderConfigurer nám dává plnou kontrolu nad konfigurací, s nevýhodou je, že se více upovídaný a většinu času, zbytečné.,

Pojďme se podívat, jak můžeme definovat toto bean pomocí Java konfigurace:

Vlastnosti v Rodič-Dítě Kontextech

Tato otázka přijde znovu a znovu: Co se stane, když naše webové aplikaci má rodič a dítě kontextu? Nadřazený kontext může mít některé společné základní funkce a fazole, a pak jeden (nebo více) dětské kontexty, možná obsahující fazole specifické pro servlet.

jaký je v tomto případě nejlepší způsob, jak definovat soubory vlastností a zahrnout je do těchto kontextů? A jak nejlépe získat tyto vlastnosti od jara?

dáme jednoduchý rozpis.,

Pokud soubor je definován v Nadřazené souvislosti:

  • @Hodnota díla v Dítě kontext: ANO
  • @Hodnota pracuje v Mateřské kontext: ANO
  • prostředí.getProperty v dětském kontextu: Ano
  • životní prostředí.getProperty v Mateřské kontext: ANO

Pokud soubor je definován v Dítě kontext:

  • @Hodnota díla v Dítě kontext: ANO
  • @Hodnota pracuje v Mateřské kontextu: NE
  • prostředí.getProperty v dětském kontextu: Ano
  • životní prostředí.,getProperty v Mateřské kontextu: NE

Závěr

Tento článek ukázal několik příkladů práce s vlastnosti a vlastnosti souborů na Jaře.

jako vždy je celý kód podporující článek k dispozici na Githubu.

začněte s Jarní 5 a na Jaře Boot 2, a to prostřednictvím Naučit Jarní kurz:

>>

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *